我们可以进行C ++项目,我们需要(de)将对象序列化为json。
在C#中我们使用的是JSON.NET。我们简单地致电:
string json = JsonConvert.SerializeObject(product);
var myNewObject = JsonConvert.DeserializeObject<MyClass>(json);
非常简单实用。
有没有人知道免费的C ++库,可以像C#一样使用简单的方法吗?
我们正在使用JsonCpp,但它不支持它。
非常感谢 此致
答案 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)