将从服务器返回的JSON加载到Protobufs中?

时间:2017-03-15 06:56:51

标签: c++ json protocol-buffers ptree

我正在开发一个C ++客户端,他们使用protobufs将JSON(客户端发送)转换为Protobuf并再次以JSON格式发送响应。

问题是我需要一个强大的json解析器,我觉得Google协议缓冲区是最好的。直到现在我已经使用了Boost Json Parser(P-Tree)并试用了Rapid Json,但它们并没有那么灵活。

使用案例: -

  1. 服务器发送的Json需要修改,很多情况。
  2. 客户端将使用protobuf的包装器在内部创建JSON并将其发送到服务器。
  3. 我按照以下方式从用户

    加载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修改,因为服务器发送的jsons可能或可能不是相同的通用格式,因此特定密钥的修改很难解析和修改。

    我如何使用protobufs来解决这个问题?

0 个答案:

没有答案