Je connais quelques bibliothèques d'analyse JSON pour Arduino.
Je n'en ai jamais utilisé, mais j'ai fait une analyse JSON simple dans un projet sur lequel je travaille, je vais donc vous montrer comment j'ai fait cela.
REMARQUE: je lis les données série à l'aide de la bibliothèque série du logiciel. Vous devrez modifier ce code pour qu'il fonctionne pour vous. Cela ne fonctionnera que sur des chaînes JSON très simples. C'est très limité, mais si c'est tout ce que vous analysez, cela fonctionnera.
Exemple de réponse JSON du serveur:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Tout d'abord, lisez uniquement les données entre accolades.
String response = "";
bool begin = false;
while (SIM900.available() || !begin) {
char in = SIM900.read();
if (in == '{') {
begin = true;
}
if (begin) response += (in);
if (in == '}') {
break;
}
delay(1);
}
Ce code lit les données un octet à la fois et une fois qu'il reçoit une accolade ouverte, il commence à les enregistrer response
. Quand il obtient un corset de fermeture, il le termine. Voici donc une limitation claire, vous ne pouvez avoir qu'un seul ensemble d'accolades d'ouverture / fermeture dans votre chaîne.
Une fois que j'ai la chaîne, j'utilise indexOf
et substring
pour extraire les informations pertinentes:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Ce code définit start
au début de id":"
+ 5 caractères dans la chaîne. C'est +5 parce que c'est combien de temps id":"
. Ainsi , les start
points à TEST1
la chaîne JSON. Dans mon système, l'ID comportera toujours 5 caractères, la fin l'est donc start + 5
. J'utilise ensuite substring
pour extraire cela.
Encore une fois, avant que quelqu'un ne me vote pour cette horrible solution: si vous savez exactement avec quoi vous travaillez et comprenez les limites de ce code, ce n'est pas une mauvaise solution. C'est une solution qui fait le travail.