#json #arduino
#json #arduino
Вопрос:
Мой 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, но при попытке получить к нему доступ он пуст. Есть идеи?? Я опытный программист на C #, но C и весь беспорядок с символами char * const для меня очень стар .. 🙂
Комментарии:
1. Вы уверены, что вам нужно звонить
deserializeJson
дважды?2. не уверен.. но это имело бы смысл. Это сообщение также анализируется другими устройствами, закодированными в micropython, и там мне нужно было также проанализировать содержимое. Но моя главная проблема в том, что serializedParams пуст
Ответ №1:
Проблема заключалась в том, как я обращался к 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
}