десериализовать JSON внутри JSON в Arduino - PullRequest
0 голосов
/ 17 апреля 2019

Мой 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
                }
             }
         }

Это вывод Iполучить при запуске вещи:

---
internal: Message arrived [master/Arduino] 
{"Order":9,"SenderID":"Master","Params":{"newSolution":"35"}}
testing 1:

++++1
deserializeJson() failed with code IncompleteInput`

Как вы можете видеть Params IS во входящем json, но при попытке получить к нему доступ, он пуст.Есть идеи ??Я опытный C # кодер, но C ++ и все типы символов char * const char очень старые для меня ..:)

1 Ответ

0 голосов
/ 18 апреля 2019

Проблема была в том, как я получил доступ к 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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...