C ++ json反序列化器

时间:2015-12-15 16:06:02

标签: c++ json serialization deserialization

我们可以进行C ++项目,我们需要(de)将对象序列化为json。

在C#中我们使用的是JSON.NET。我们简单地致电:

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

非常简单实用。

有没有人知道免费的C ++库,可以像C#一样使用简单的方法吗?

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

非常感谢 此致

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我在C ++ websocket服务器中使用https://github.com/nlohmann/json与html / javascript客户端交谈。 websocket框架是https://github.com/zaphoyd/websocketpp。所以发送json结构&#39;匹配&#39;来自服务器就像

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需要增强库。

答案 2 :(得分:0)

我为c ++编写了这个序列化器/解串器,因为我找不到符合我需要的任何非升压串行器:

Pakal Persist

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