nlohmann/json uWebsocket
Posted
技术标签:
【中文标题】nlohmann/json uWebsocket【英文标题】: 【发布时间】:2018-09-25 18:00:40 【问题描述】:对于一个项目,我想将uNetworking/uWebSockets
库与nlohmann/json
库结合使用。
这是我目前的代码:
#include <uWS/uWS.h>
using namespace uWS;
using json = nlohmann::json;
int main()
Hub h;
h.onMessage([](WebSocket<SERVER> *ws, char *message, size_t length, OpCode opCode)
json parsed = json::parse(message);
ws->send(message, length, opCode);
);
if (h.listen(3000))
h.run();
解析消息时出现此错误(经过验证的 json):
libc++abi.dylib: terminating with unexpected exception of type nlohmann::detail::parse_error: [json.exception.parse_error.101] parse error at 37: syntax error - invalid literal; last read: '" \"happy\": true, \"pi\": 3.141 "o'; expected end of input
到目前为止,我被困住了。
提前致谢。
西奥
【问题讨论】:
这是一个开始,但我们无法仅用这段代码重现问题。 @tadman 我编辑了代码 @TheoBouwman 您如何将消息发送到此应用程序?如果有一个 bash 命令我们可以剪切和粘贴以生成相同的消息,那就太好了。查看错误消息>`'" \"happy\": true, \"pi\": 3.141 "o'<
似乎该消息中有一些额外的字符使其不是JSON。我会添加代码以打印出每个字符(及其 ASCII 代码),以查看您在消息中得到了哪些字符。
【参考方案1】:
我找不到uWebSockets
的任何文档,但大概是因为onMessage
有一个length
参数message
不一定是空终止的。因此,您需要这样做:
json parsed = json::parse(message, length);
【讨论】:
@TheoBouwman 没有编译?坠毁?有和以前一样的问题吗?你试过调试吗?【参考方案2】:你似乎在解析
" \"happy\": true, \"pi\": 3.141 "o
有几个问题:
JSON 对象周围的引号似乎是无意的 - 结果将是字符串而不是对象 字符串后面的o
是意外的,因此出现错误消息;注意 o
是读取的第 37 个字符,因此 parse error at 37
【讨论】:
以上是关于nlohmann/json uWebsocket的主要内容,如果未能解决你的问题,请参考以下文章
C++ nlohmann/json 如何使用运行时提供的 json_pointers 来读取 json 值
nlohmann::json::dump()函数(将JSON对象序列化为字符串)
c++11:nlohmann::json进阶使用应用adl_serializer解决第三方数据类型(such as uri)的序列化和反序列化