【问题标题】:C++ Protobuf to/from JSON conversion [closed]C ++ Protobuf到/从JSON转换[关闭]
【发布时间】:2011-10-23 21:16:15
【问题描述】:

是否有人熟悉将 protobuf 消息与 JSON 相互转换的稳定 C++ 解决方案(库、代码 sn-p 等)?

【问题讨论】:

  • protobuf 消息 它们自己 并没有足够的信息;我只是反序列化成一个对象模型(protobuf),然后序列化(你选择的 json 引擎)……虽然我不使用 C++,所以我不知道那里可用的确切选项(轻而易举)使用 protobuf-net,但是:不同的平台)
  • 非常感谢你的想法,马克。这肯定会节省很多时间。我也在考虑试试protobuf的反射机制。希望其中一种方法能奏效:)
  • 我认为使用 protobuf 的反射机制是一种从 JSON 到 protobuf 生成类型的通用 JSON 序列化器/解析器的好方法。我做了这样的事情,但是在code.google.com/p/corbasim 中生成了 CORBA IDL 类型
  • protobuf v3 支持 JSON,见stackoverflow.com/a/44291335/757777

标签: c++ json serialization protocol-buffers


【解决方案1】:

这个更好 IMO:https://github.com/shramov/json2pb

它进行双向转换并处理扩展

【讨论】:

    【解决方案2】:

    pbjson 是另一个,它建立在 rapidjson 之上,可能更快。

    【讨论】:

    • 这个对我有用。我尝试了json2pbfirst 并且很难让它工作(并且在文档中几乎没有发现)。让这个pbjson 工具与他们的测试示例一起工作我没有遇到太多麻烦,我发现编辑他们的测试驱动程序来解析我的数据只需要一点点努力。
    • 顺便说一句,这个pbjson 工具的作者说他们从pb2json 中汲取了灵感。
    【解决方案3】:

    我已经为 protobuf 生成的类型创建了一个 JSON 解析器的引导实现,使用它的反射机制,并调整了我之前为 CORBA IDL 生成的类型所做的解析。

    您可以在http://corbasim.googlecode.com/svn/trunk/protobuf2json_exported.zip找到它

    通过这种方式,对于每个 protobuf 定义的消息,您将能够通过以下方式解析其实例:

    Foo foo;
    
    const std::string json_foo = "{\"text\": \"Hello world\"}";
    
    protobuf2json::json::parse(foo, json_foo);
    

    这只是一个初步的实现,它只支持字符串字段,但很容易实现各种字段。

    【讨论】:

      【解决方案4】:

      pb2json 是另一个可以做到这一点的 C++ 库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 2012-05-06
        • 1970-01-01
        相关资源
        最近更新 更多