在javascript中解析json messagepack数据

时间:2015-11-02 14:56:36

标签: 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 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()上失败
Uncaught Error: Invalid type: 0xh

在set_payload()

中发送json作为字符串时
msg->set_payload(jdata.dump());

传输正常

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

2 个答案:

答案 0 :(得分:0)

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

尝试:msg->set_payload(buffer.str());

答案 1 :(得分:0)

如果有帮助:nlohmann / json现在支持MessagePack(和CBOR),所以你现在可以完全用nlohmann / json实现你的场景。有关示例,请参阅https://github.com/nlohmann/json#binary-formats-cbor-and-messagepack