Я отправляю данные json на сервер websocketpp с помощью пакета сообщений с помощью kawanet/msgpack-lite (javascript) на клиенте и msgpack/msgpack-c (C++), чтобы распаковать его и nlohmann/json на проанализируйте его на сервере. Это нормально.Parsing json messagepack данные в javascript
Но я, по-видимому, неправильно использую 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
При отправке JSON в виде строки в set_payload()
msg->set_payload(jdata.dump());
он передается в порядке
FileReader.onload(): {"cnt":4,"data":"test","type":"msg"}
Я пробовал это, но он отправляет данные в открытом виде, поэтому он не представляется сериализованным. – kometen
Это потому, что вы «упаковываете» строки JSON. jdata.dump() преобразует ваши данные в строку JSON. msgpack :: pack затем упаковывает эту строку. Там не очень много, чтобы упаковать. msgpack, как правило, вы используете вместо JSON, а не для упаковки JSON. – zaphoyd
Спасибо. JSON - хороший формат при работе с javascript, но, возможно, он не идеален для C++. Я искал способы сериализации данных между javascript и C++, а messagepack выглядит как предпочтительный. Maby Я должен искать javascript-библиотеку, которая имитирует unordered_map на C++. – kometen