2015-11-02 3 views
0

Я отправляю данные 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"} 

ответ

0

Адрес в std::stringstream не является указателем на его основной буфер.

Попытка: msg->set_payload(buffer.str());.

+0

Я пробовал это, но он отправляет данные в открытом виде, поэтому он не представляется сериализованным. – kometen

+1

Это потому, что вы «упаковываете» строки JSON. jdata.dump() преобразует ваши данные в строку JSON. msgpack :: pack затем упаковывает эту строку. Там не очень много, чтобы упаковать. msgpack, как правило, вы используете вместо JSON, а не для упаковки JSON. – zaphoyd

+0

Спасибо. JSON - хороший формат при работе с javascript, но, возможно, он не идеален для C++. Я искал способы сериализации данных между javascript и C++, а messagepack выглядит как предпочтительный. Maby Я должен искать javascript-библиотеку, которая имитирует unordered_map на C++. – kometen

0

Если это помогает: nlohmann/json теперь поддерживает MessagePack (и CBOR), поэтому теперь вы можете полностью реализовать свой сценарий с помощью nlohmann/json. См. Примеры https://github.com/nlohmann/json#binary-formats-cbor-and-messagepack.

+0

Пожалуйста, не оставляйте идентичные ответы на несколько вопросов. Отправьте один хороший ответ, затем проголосовате/отметьте, чтобы закрыть другие вопросы как дубликаты. Если вопрос не является дубликатом, * приложите свои ответы на вопрос. * –

 Смежные вопросы

  • Нет связанных вопросов^_^