Para utilizar ArduinoJson, primero debes descargar la librería desde ArduinoJson, copiar los archivos en el directorio de librerías de tu entorno de desarrollo, y luego incluir la librería en tu código con:
#include <ArduinoJson.h>
Para crear un objeto JSON, necesitamos declarar un StaticJsonDocument
con el tamaño que queramos:
StaticJsonDocument<200> doc;
Luego podemos agregar propiedades al documento de la siguiente manera:
doc["sensor"] = "gps";
doc["time"] = 1351824120;
También podemos agregar arreglos dentro del documento JSON, por ejemplo:
JsonArray data = doc.createNestedArray("data");
data.add(48.756080);
data.add(2.302038);
Para mostrar el JSON de forma legible en el monitor serie, utilizamos:
serializeJsonPretty(doc, Serial);
Para convertir un string en formato JSON a un objeto JSON, utilizamos el parser de ArduinoJson. Este método también nos permite verificar si el archivo JSON se ha leído correctamente:
Serial.begin(115200);
StaticJsonDocument<200> doc;
char json[] = "{"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}";
DeserializationError error = deserializeJson(doc, json);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
const char* sensor = doc["sensor"];
long time = doc["time"];
double latitude = doc["data"][0];
double longitude = doc["data"][1];
Serial.println(sensor);
Serial.println(time);
Serial.println(latitude, 6);
Serial.println(longitude, 6);
Primero nos conectamos al servidor:
EthernetClient client;
client.setTimeout(10000);
if (!client.connect("arduinojson.org", 80)) {
Serial.println(F("Connection failed"));
return;
}
Serial.println(F("Connected!"));
Luego, comprobamos el estado de la conexión:
char status[32] = {0};
client.readBytesUntil('\r', status, sizeof(status));
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
Serial.print(F("Unexpected response: "));
Serial.println(status);
return;
}
Nos saltamos los encabezados del HTML:
char endOfHeaders[] = "\r\n\r\n";
if (!client.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
return;
}
Finalmente, leemos el JSON de la web usando un DynamicJsonDocument
y lo deserializamos:
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, client);
Primero, abrimos el archivo para escribir:
File file = SD.open("/config.json", FILE_WRITE);
if (!file) {
Serial.println(F("Failed to create file"));
return;
}
Luego configuramos los datos que queremos guardar:
StaticJsonDocument<256> doc;
doc["hostname"] = "example.com";
doc["port"] = 80;
Finalmente, guardamos el archivo con:
if (serializeJson(doc, file) == 0) {
Serial.println(F("Failed to write to file"));
}
file.close();
Para más información visita ArduinoJson.