json - 在arduino中反序列化json中的json
问题描述
我的 arduino 正在通过 TCP 接收一个如下所示的 json:
{"Order":9,"SenderID":"Master","Params":{"newSolution":"35"}}
我用这样的方式解析它#include <ArduinoJson.h>
:
void Connectivity::ProcessNewMessage(char* topic, byte* payload, unsigned int length)
{
StaticJsonDocument<80> doc;
DeserializationError err = deserializeJson(doc, payload);
if (err) {
Serial.print(F("deserializeJson() failed with code "));
Serial.println(err.c_str());
}
else
{
//we get the Order, or 99 if Order is not set. JsonDeserializer never makes exceptions
//So the only way to know something was wrong is provide unexpected values as Order 99
int Order = doc["Order"] | 99;
switch(Order)
{
case 9:
{
//here I need to access the new solution that is
//in the Params.
const char* serializedParams = (const char*) doc["Params"];
Serial.println("testing 1:");
Serial.println(serializedParams);
Serial.println("++++1");
DeserializationError err = deserializeJson(doc, serializedParams);
if (err) {
Serial.print(F("deserializeJson() failed with code "));
Serial.println(err.c_str());
}
else
{
//here the code when everything works
}
}
}
这是我运行这个东西时得到的输出:
---
internal: Message arrived [master/Arduino]
{"Order":9,"SenderID":"Master","Params":{"newSolution":"35"}}
testing 1:
++++1
deserializeJson() failed with code IncompleteInput`
正如您在传入的 json 中看到的 Params IS 但在尝试访问它时,它是空的。有任何想法吗 ??我是一位经验丰富的 C# 编码器,但 C++ 和所有 char char* const char mess 对我来说已经很老了.. :)
解决方案
问题是我访问 serializedParams 的方式。此解决方案有效:
//incoming string is : {"Order":9,"SenderID":"Master","Params":{"newSolution":"35"}}
StaticJsonDocument<80> doc;
DeserializationError err = deserializeJson(doc, payload);
if (err) {
Serial.print(F("deserializeJson() failed with code "));
Serial.println(err.c_str());
}
else
{
const char* Params_newSolution = doc["Params"]["newSolution"];
// Params_newsOlution contains = "35"
float alreadyParsed = doc["Params"]["newSolution"];
// alreadyParsed contains 35.0
}
推荐阅读
- c# - 如何使用正则表达式从以下模式中提取数字: {"idProveedors":["73","3","67333"]} in C#
- json - 无法在 post 请求中发送阿拉伯文本
- javascript - 对象数组转换以获取对象数组中每个属性的计数
- django - 在 Elastic Beanstalk Aws React Django 上托管站点时如何从单独的 S3 存储桶加载静态文件
- intellij-idea - 在插件测试中修改 IntelliJ 自定义属性
- logging - how to log to a file with Deno
- javascript - 使用一个标题行数组和表的其余标题值数组操作 JSON 键值
- r - 有效地将日期列的小时更改为另一个数据框列 R 的值
- python - 在 python 中,如何用其组成数据填充条形图中的每个条形?
- php - PHP 语句到 SQL Case 语句