Работа с JSON и MySql для сбора значений в переменные - PullRequest
1 голос
/ 01 мая 2020

Я работаю над проектом, включающим сбор информации из моего .json файла в переменную в моем скриншоте Arduino, но у меня возникают проблемы, когда дело доходит до добавления значений в переменные, когда у меня более 1 значения , Если у меня есть более 1 значения, я не могу сохранить его в новой переменной.
Вот так выглядит мой JSON файл:

 [{"AutoIncrement":"1","Aparelho":"LED","Status":"0"}, 
 {"AutoIncrement":"2","Aparelho":"LED1","Status":"1"}]

Это мой эскиз Arduino:

    char json[500];
    payload.replace(" ", "");
    payload.replace("\n", "");
    payload.trim();
    payload.remove(0,1);
    payload.toCharArray(json, 500);

    StaticJsonDocument<200> doc;
    deserializeJson(doc, json);

    //Isso nao depende do nome no banco de dados, depende do nome dentro de action.php
    //LED 1
    int id = doc["AutoIncrement"];
    const char* nome = doc["Aparelho"];
    int stat = doc["Status"];

    //LED 2
    int id1 = doc["AutoIncrement"];
    const char* nome1 = doc["Aparelho"];
    int stat1 = doc["Status"];

    Serial.println(id);
    Serial.println(nome);
    Serial.println(stat);

    Serial.println(id1);
    Serial.println(nome1);
    Serial.println(stat1);

    if (stat == 1)
    {
      digitalWrite(led, HIGH);
      digitalWrite(led1, HIGH);
    }
    else if (stat == 0)
    {
      digitalWrite(led, LOW);
      digitalWrite(led1, LOW);
    }

Это вывод:

 Statuscode: 200
 [{"AutoIncrement":"1","Aparelho":"LED","Status":"0"}, 
 {"AutoIncrement":"2","Aparelho":"LED1","Status":"1"}]
 1
 LED
 0
 //This was suppose to be 2, LED1, 0:
 1
 LED
 0

1 Ответ

1 голос
/ 01 мая 2020

Ваш массив JSON состоит из двух JSON объектов. Вы можете получить доступ к первому объекту с помощью doc[0], а для доступа к элементу в первом объекте это будет doc[0]["AutoIncrement"].

Обновление

Однако на основе Ваш комментарий, я понял, что ваш payload на самом деле является объектом класса Arduino String, если вы распечатаете его, он будет выглядеть так:

"[{\"AutoIncrement\":\"1\",\"Aparelho\":\"LED\",\"Status\":\"0\"}, {\"AutoIncrement\":\"2\",\"Aparelho\":\"LED1\",\"Status\":\"1\"}]";

И код, который пытается преобразовать объект String в c массив символов, фактически вызывающий недопустимый объект JSON. Измените ваш код, как показано ниже:

// converting String payload into a c char array
int length = payload.length() + 1;
char json[length];
payload.toCharArray(json, length);

StaticJsonDocument<200> doc;
deserializeJson(doc, json);

//LED 1
int id = doc[0]["AutoIncrement"];
const char* nome = doc[0]["Aparelho"];
int stat = doc[0]["Status"];

//LED 2
int id1 = doc[1]["AutoIncrement"];
const char* nome1 = doc[1]["Aparelho"];
int stat1 = doc[1]["Status"];

Serial.println(id);
Serial.println(nome);
Serial.println(stat);

Serial.println(id1);
Serial.println(nome1);
Serial.println(stat1);

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

1
LED
0
2
LED1
1
...