我正在开发一个 C++ 客户端,他们使用 protobufs 将 JSON(该客户端发送)转换为 Protobuf,并以 JSON 格式再次发送回响应。
问题是我需要一个强大的 json 解析器,我觉得 Google 协议缓冲区是最好的。到目前为止,我已经使用了 Boost Json Parser (P-Tree) 并尝试了 Rapid Json,但它们并不那么灵活。
用例:-
- 服务器发送的Json需要修改,很多情况。
- 客户端将使用 protobuf 的包装器在内部创建 JSON 并将其发送到服务器。
我从用户以下列方式加载 Json
try
{
std::ifstream fileHandle(sJsonFile.c_str());
if (!fileHandle.is_open())
{
ErrorHandler::getErrorInstance().setError(ERR_JSON_FILE_OPEN, sJsonFile);
return EXIT_FAILURE;
}
boost::property_tree::read_json(fileHandle, root);
fileHandle.close();
}
catch (boost::property_tree::json_parser::json_parser_error& err)
{
ErrorHandler::getErrorInstance().setError(ERR_ILLFORMED_JSON, err.what());
return EXIT_FAILURE;
}
或者像这样来自响应 JSON
try
{
std::stringstream ss;
ss << sJsonResponse;
boost::property_tree::read_json(ss, root);
}
catch (boost::property_tree::json_parser::json_parser_error& err)
{
ErrorHandler::getErrorInstance().setError(ERR_ILLFORMED_JSON, err.what());
return EXIT_FAILURE;
}
问题在于 JSON 修改,因为服务器发送的 json 可能采用相同的通用格式,也可能不同,因此特定键的修改很难解析和修改。
我如何使用 protobufs 来克服这个问题?