mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-09-25 14:30:56 +02:00
Destroyed Examples (markdown)
162
Examples.md
162
Examples.md
@@ -1,162 +0,0 @@
|
||||
This page contains user contributed examples, feel free to edit.
|
||||
|
||||
For official examples, go to: https://arduinojson.org/example/
|
||||
|
||||
## Example 1: complex nested object
|
||||
|
||||
From [issue #85](https://github.com/bblanchon/ArduinoJson/issues/85):
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"error": {
|
||||
"address": "",
|
||||
"description": "link button not pressed",
|
||||
"type": "101"
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
Can be generated with the following code:
|
||||
|
||||
```c++
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonArray& root = jsonBuffer.createArray();
|
||||
JsonObject& error = root.createNestedObject().createNestedObject("error");
|
||||
error["address"] = "";
|
||||
error["description"] = "link button not pressed";
|
||||
error["type"] = "101";
|
||||
root.prettyPrintTo(Serial);
|
||||
```
|
||||
|
||||
And, while stored in `char json[]` can be decoded with the following code:
|
||||
|
||||
```c++
|
||||
DynamicJsonBuffer jsonBuffer;
|
||||
JsonArray& root = jsonBuffer.parseArray(json);
|
||||
JsonObject& error = root[0]["error"];
|
||||
const char* address = error["address"];
|
||||
const char* description = error["description"];
|
||||
int type = error["type"];
|
||||
```
|
||||
|
||||
Don't forget to replace the `DynamicJsonBuffer` by a `StaticJsonBuffer` if you need to run on an embedded platform like an Arduino.
|
||||
|
||||
## Example 2: get the weather data from aviationweather.gov or geonames.org
|
||||
char *MTserverName = "api.geonames.org"; // server name
|
||||
String cmd = "GET /weatherIcaoJSON?ICAO="; // prepare the command to send to the web server after
|
||||
|
||||
getting the data on JSON format and parsing the buffer:
|
||||
|
||||
|
||||
JsonObject& _root = jsonBuffer.parseObject(MTjson); // parse the JSON buffer
|
||||
|
||||
if (!_root.success()) { // everything OK
|
||||
Serial.println("MTparseObject() failed");
|
||||
delay(10000);
|
||||
__wferrno=-2; // set the error code
|
||||
return NULL;
|
||||
}
|
||||
if (Debug&&Debugplus) Serial.println("Beauty print...");
|
||||
if (Debug&&Debugplus) _root.prettyPrintTo(Serial); // print it on prettyPrint format
|
||||
if (Debug&&Debugplus) Serial.println("END of Beauty print...");
|
||||
|
||||
JsonObject & _ooo = _root["weatherObservation"]; // query root
|
||||
MET->MTobservation = _ooo ["observation"]; // raw observation
|
||||
MET->MTtemp = _ooo ["temperature"]; // temp
|
||||
MET->MTpressure = _ooo ["hectoPascAltimeter"]; // QNH
|
||||
MET->MTQNH = _ooo ["hectoPascAltimeter"]; // QNH
|
||||
MET->MTdewpoint = _ooo ["dewPoint"]; // Dew point
|
||||
MET->MThumidity = _ooo ["humidity"]; // humidity %
|
||||
MET->MTwinddeg = _ooo ["windDirection"]; // wind
|
||||
MET->MTwindspeed = _ooo ["windSpeed"]; // speed
|
||||
MET->MTobservationtime= _ooo ["datetime"]; // time
|
||||
|
||||
## Example 3: iterators
|
||||
|
||||
### JsonArray
|
||||
|
||||
```c++
|
||||
char json[] = "[\"A\",\"B\",\"C\"]";
|
||||
JsonArray& array = jsonBuffer.parseArray(json);
|
||||
|
||||
for(JsonArray::iterator it=array.begin(); it!=array.end(); ++it)
|
||||
{
|
||||
// *it contains the JsonVariant which can be casted as usuals
|
||||
const char* value = *it;
|
||||
|
||||
// this also works:
|
||||
value = it->as<const char*>();
|
||||
|
||||
}
|
||||
```
|
||||
### JsonObject
|
||||
|
||||
```c++
|
||||
char json[] = "{\"key\":\"value\"}";
|
||||
JsonObject& object = jsonBuffer.parseObject(json);
|
||||
|
||||
for(JsonObject::iterator it=object.begin(); it!=object.end(); ++it)
|
||||
{
|
||||
// *it contains the key/value pair
|
||||
const char* key = it->key;
|
||||
|
||||
// it->value contains the JsonVariant which can be casted as usual
|
||||
const char* value = it->value;
|
||||
|
||||
// this also works
|
||||
value = it->value.as<const char*>();
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### JsonVariant
|
||||
|
||||
for an object:
|
||||
```c++
|
||||
for( const auto& kv : variant.as<JsonObject>() ) {
|
||||
Serial.println(kv.key);
|
||||
Serial.println(kv.value.as<char*>());
|
||||
}
|
||||
```
|
||||
and for an array:
|
||||
```c++
|
||||
for( const auto& value : variant.as<JsonArray>() ) {
|
||||
Serial.println(value.as<char*>());
|
||||
}
|
||||
```
|
||||
|
||||
## Example 4: Serialize and Deserialize
|
||||
Here is the canonical example for serializing and deserializing with ArduinoJson.
|
||||
By following this example, you are making the best usage of your memory and you maintain a good software design.
|
||||
|
||||
```c++
|
||||
struct SensorData {
|
||||
const char* name;
|
||||
int time;
|
||||
float value;
|
||||
};
|
||||
|
||||
#define SENSORDATA_JSON_SIZE (JSON_OBJECT_SIZE(3))
|
||||
|
||||
bool deserialize(SensorData& data, char* json)
|
||||
{
|
||||
StaticJsonBuffer<SENSORDATA_JSON_SIZE> jsonBuffer;
|
||||
JsonObject& root = jsonBuffer.parseObject(json);
|
||||
data.name = root["name"];
|
||||
data.time = root["time"];
|
||||
data.value = root["value"];
|
||||
return root.success();
|
||||
}
|
||||
|
||||
void serialize(const SensorData& data, char* json, size_t maxSize)
|
||||
{
|
||||
StaticJsonBuffer<SENSORDATA_JSON_SIZE> jsonBuffer;
|
||||
JsonObject& root = jsonBuffer.createObject();
|
||||
root["name"] = data.name;
|
||||
root["time"] = data.time;
|
||||
root["value"] = data.value;
|
||||
root.printTo(json, maxSize);
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user