管理 HTTP 响应(uint_8 十进制向量)并使用 HTTP 解析器读取 JSON 值

Manage HTTP response (uint_8 decimal vector) and use http parser to read JSON values

我正在 Simulink 中处理客户端(我的计算机)和服务器之间的 TCP 连接。 通过标准以太网块,我发送如下 HTTP 请求:

GET /status HTTP/1.1
Host:...
Accept: application/json

为了发送它,我用 uint8('GET /status...') 命令转换它。 服务器响应,始终使用 uint8 数组(十进制字节),如下所示:

resp=[72 84 80 47 49 32 50 48...] //(HTTP/1.1 200 OK... ).

在回复“resp”的内容中,总是十进制字符,有一段JSON格式的文字,如{"VarA":1000, "VarB":2000,...}.

我的目的是创建一个 S-Function(但更常见的是 C++ 中的代码),输入向量“resp”returns VarA 和 VarB 的值(1000和 2000).

我知道有很多像 nlohmann/json 或 PicoHTTPParser 这样的单头源代码,但我不知道如何在特定情况下使用它们。

  1. 我的想法是将“resp”转成字符串,然后传递给已经写在.h文件中的函数进行JSON/HTTP管理。这个对吗?可以吗? 我问自己这个问题是因为我不知道那些 .h 文件的解析函数采用什么格式输入。

  2. 我也想知道将其转换为字符串然后对其进行处理是否正确...有人知道是否有直接在 uint_8 向量上工作的东西吗?

  3. 我应该在处理之前从“resp”中提取正文消息吗?

抱歉提出这些问题,但我有点困惑。我什至不知道如何在 Google 上搜索这个问题! 实际上,我正在寻找达到最终目标的最简单方法。

谢谢大家!

我用了https://github.com/nlohmann/json。 非常容易使用的库。 请注意,boost 库中消息体的容量限制为 8k。 我不得不编写自己的处理程序(最终速度更快、更可靠)。是的,有点冒昧,但我扔掉了所有额外的支票和其他沉重的东西。当你只期望 json 并且只有特定格式时,你可以忽略通用性,如果输入数据不正确,只是 return 一个异常。