【问题标题】:C++ json deserializer [closed]C ++ json反序列化器[关闭]
【发布时间】:2015-12-15 16:06:02
【问题描述】:

我们可以进行 C++ 项目,我们需要将对象从 json 序列化到 json 中。

在 C# 中,我们使用 JSON.NET。我们简单的调用:

string json = JsonConvert.SerializeObject(product);
var myNewObject = JsonConvert.DeserializeObject<MyClass>(json);

非常简单实用。

有没有人知道免费的 C++ 库,它可以像在 C# 中一样简单地使用?

我们正在使用 JsonCpp,但它不支持它。

非常感谢 问候

【问题讨论】:

  • 查找 janson 库,C++ API 非常有用
  • 如果您特别想要c++,请不要为c 添加标签。它们不是同一种语言。
  • SimpleJSON Library 适合我。
  • 你用过search吗?

标签: c++ json serialization deserialization


【解决方案1】:

C++ 不支持反射,因此您必须为每个对象编写自己的序列化和反序列化函数。

【讨论】:

  • 坦率地说,C# Newtonsoft.JsonConvert 库令人难以置信的便利性和易用性,说明了为什么我们需要在 C++ 中进行反射。幸运的是,我们可能会在某个时候在 C++ 中获得编译时反射。为此,标准委员会成立了一个研究组“SG7 Reflection”。
【解决方案2】:

我在 C++ websocket 服务器中使用https://github.com/nlohmann/json 与 html/javascript 客户端对话。 websocket 框架是https://github.com/zaphoyd/websocketpp。所以从服务器发送 json 结构“匹配”就像

msg->set_payload(matches.dump());
m_server.send(hdl, msg);

同样来自客户的明智之举

var m = "la_liga";
var msg = {
    "type": "request",
    "data": m
}
msg = JSON.stringify(msg);
ws.send(msg);

当我在服务器上收到 json 时,我会对其进行解析,然后进行 try-catch

void on_message(connection_hdl hdl, server::message_ptr msg) {
    connection_ptr con = m_server.get_con_from_hdl(hdl);

    nlohmann::json jdata;

    std::string payload = msg->get_payload();
    try {
        jdata.clear();
        jdata = nlohmann::json::parse(payload);
        if (jdata["type"] == "update") {
            <do something with this json structure>
        }
    } catch (const std::exception& e) {
        msg->set_payload("Unable to parse json");
        m_server.send(hdl, msg);
        std::cerr << "Unable to parse json: " << e.what() << std::endl;
    }
}

同样在客户端

ws.onmessage = function (e) {
    var receivedMsg = JSON.parse(e.data);

    if (receivedMsg.type == "table") {
        <sort and display updated table standing>
    }
}

Websocketpp 需要 boost 库。

【讨论】:

    【解决方案3】:

    我为 c++ 编写了这个序列化器/反序列化器,因为我找不到任何适合我需要的非 boost 序列化器:

    Pakal Persist

    它同时支持 json 和 xml 以及多态对象。

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 2018-10-03
      • 2022-10-23
      • 2021-01-11
      • 2021-12-27
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多