在javascript中解析json messagepack数据

在javascript中解析json messagepack数据,javascript,c++,json,websocket,messagepack,Javascript,C++,Json,Websocket,Messagepack,我在客户端使用kawanet/msgpack lite(javascript)和msgpack/msgpack-c(c++)将json数据发送到带有messagepack的websocketpp服务器,并在服务器上使用nlohmann/json对其进行解析。这很好 但我显然用错了messagepack,因为我无法正确解析返回的数据 服务器: if (jdata["type"] == "msg") { std::stringstream buffer; std::string cl

我在客户端使用kawanet/msgpack lite(javascript)和msgpack/msgpack-c(c++)将json数据发送到带有messagepack的websocketpp服务器,并在服务器上使用nlohmann/json对其进行解析。这很好

但我显然用错了messagepack,因为我无法正确解析返回的数据

服务器:

if (jdata["type"] == "msg") {
    std::stringstream buffer;
    std::string clientmsg = jdata["data"];
    jdata["cnt"] = clientmsg.length();
    msgpack::pack(buffer, jdata.dump());
    size_t plen = buffer.tellp();
    msg->set_payload(&buffer, plen);
    m_server.send(hdl, msg);
}
客户:

reader.onload = function (e) {
    console.log("FileReader.onload(): " + reader.result);
    var decoded_message = msgpack.decode(reader.result);
}
reader.readAsText(e.data);
它在msgpack.decode()上失败

在set_payload()中以字符串形式发送json时

很好

FileReader.onload(): {"cnt":4,"data":"test","type":"msg"}

std::stringstream
的地址不是指向其底层缓冲区的指针


尝试:
msg->set_有效载荷(buffer.str())

如果有帮助的话:nlohmann/json现在支持MessagePack(和CBOR),因此您现在可以使用nlohmann/json完全实现您的场景。请参阅示例。

我尝试过,但它以明文形式发送数据,因此它看起来没有序列化。这是因为您正在“打包”JSON字符串。dump()将数据序列化为JSON字符串。然后打包这个字符串。实际上没有多少东西可以打包。msgpack通常是用来代替JSON的,而不是用来打包JSON。谢谢。JSON是一个很好的格式,当使用JavaScript,但可能不是那么理想的C++。我已经找到了JavaScript和C++之间数据串行化的方法,MasaPePACK看起来是首选的。Maby我应该寻找一个JavaScript库,它模仿C++中的无序映射。请不要对多个问题发表相同的答案。发布一个好的答案,然后投票/标记以重复结束其他问题。如果问题不是重复的,请根据问题定制您的答案。
msg->set_payload(jdata.dump());
FileReader.onload(): {"cnt":4,"data":"test","type":"msg"}