Domanda:
Analisi di JSON su Arduino
Richard
2014-07-27 02:10:43 UTC
view on stackexchange narkive permalink

Sto utilizzando la libreria ArduinoJson. C'è un ottimo esempio per analizzare un singolo oggetto JSON nel codice sorgente. Sto tentando di iterare su un array di oggetti JSON:

  #include <JsonParser.h> utilizzando lo spazio dei nomi ArduinoJson :: Parser; void setup () {Serial.begin (9600); char json [] = "[{\" sensor \ ": \" gps \ ", \" time \ ": 1351824120, \" data \ ": [48.756080,2.302038]}, \ {\" sensor \ ": \ "gps \", \ "time \": 1351824140, \ "data \": [50.756080,21.302038]}] "; JsonParser<32> parser; JsonArray root = parser.parse (json); if (! root.success ()) {Serial.println ("JsonParser.parse () failed"); ritorno; } per (JsonArrayIterator item = root.begin (); item! = root.end (); ++ item) {// non sono sicuro di cosa fare qui. Serial.println ((* item) ["data"]); // risulta in: // ParseJsonArray: 21: errore: chiamata di sovraccarico // 'println (ArduinoJson :: Parser :: JsonValue)' è ambiguo JsonObject something = JsonObject (* item); Serial.println (qualcosa ["sensore"]); // risulta in: // ParseJsonArray: 26: errore: chiamata di sovraccarico // "println (ArduinoJson :: Parser :: JsonValue)" è ambiguo}} void loop () {}  

l'elemento è di tipo JsonValue. Vorrei trattarlo come un JsonObject e ricavarne alcuni dati.

does the data parse from above object is for both sensorhow to parse value of each object of jasonLIKE i have[{"sensor":"gps","time":"1351824120"},{"sensor":"temp","time":"1351824120"}]
Due risposte:
#1
+3
Benoit Blanchon
2014-08-03 18:32:12 UTC
view on stackexchange narkive permalink

È così che scriverei questo ciclo:

  for (JsonArrayIterator it = root.begin (); it! = root.end (); ++ it) {JsonObject row = * esso; char * sensor = row ["sensor"]; tempo lungo = riga ["ora"]; doppia latitudine = riga ["dati"] [0]; doppia longitudine = riga ["dati"] [1]; Serial.println (sensore); Serial.println (ora); Serial.println (latitudine, 6); Serial.println (longitude, 6);}  

E, se è disponibile C ++ 11 (che non è il caso di Arduino IDE 1.0.5):

  per (riga automatica: root) {char * sensor = row ["sensor"]; tempo lungo = riga ["ora"]; doppia latitudine = riga ["dati"] [0]; doppia longitudine = riga ["dati"] [1]; Serial.println (sensore); Serial.println (ora); Serial.println (latitudine, 6); Serial.println (longitude, 6);}  
+1 per un ottimo caso d'uso del ciclo `for`.
#2
+2
Richard
2014-07-27 22:05:59 UTC
view on stackexchange narkive permalink

Capito! Inizialmente, era sufficiente eseguire il casting del recupero dell'elemento da JsonObject prima della stampa.

  JsonObject something = JsonObject (* item); Serial.println ((char *) something ["sensor"]) ;  

Anche se, penso che sia migliore.

  char * sensor = (* item) ["sensor"]; Serial.println (sensor) ;  


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...