Example of JSON Serialize and Deserialize with ESP-IDF.
ESP-IDF includes this cJSON library.
You can use JSON components as standard.
But the documentation is very poor.
The official documentation for the JSON component is here.
Here is a example by Dave Gamble.
git clone https://github.com/nopnop2002/esp-idf-json
cd esp-idf-json/json-basic-object
idf.py flash monitor
From print_value() function, the pointer returned is allocated by cJSON_strdup() and it is returned to the caller.
Buffers returned by cJSON_Print must be freed by the caller.
Please use the proper API (cJSON_free) rather than directly calling stdlib free.
char *my_json_string = cJSON_Print(root);
ESP_LOGI(TAG, "my_json_string\n%s",my_json_string);
cJSON_Delete(root);
cJSON_free(my_json_string);
-
Array
Array, like this, have no name.
Array starts with [ and ends with ].
root is defined by cJSON_CreateArray.
element is added by cJSON_AddItemToArray.["abc", 123, true, false, null]
-
Object
Object, like this, have name.
Object starts with { and ends with }.
root is defined by cJSON_CreateObject.
element is added by cJSON_AddItemToObject.{ "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, }
-
Object in Array
["abc", 123, true, false, null, { "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2 }]
[{ "id": 0, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2 }, { "id": 1, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2 }]
-
Array in Array
[["abc", 120], ["abc", 121], ["abc", 122], ["abc", 123], ["abc", 124], ["abc", 125], ["abc", 126], ["abc", 127], ["abc", 128], ["abc", 129]]
-
Object in Object
{ "name": "Jack (\"Bee\") Nimble", "format": { "type": "rect", "width": 1920, "height": 1080, "interlace": false, "frame rate": 24 } }
-
Array in Object
{ "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }
-
Object in Array in Object
{ "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": [{ "width": 1280, "height": 720 }, { "width": 1920, "height": 1080 }, { "width": 3840, "height": 2160 }] }
-
Array in Object in Array
[{ "id": 0, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }, { "id": 1, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }]
Serialization starts from the lowest level.
No matter how complex the structure, there are only objects and arrays.
-
Target structure
{ "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": [{ "width": 1280, "height": 720 }, { "width": 1920, "height": 1080 }, { "width": 3840, "height": 2160 }] }
-
Create 3 objects
This is simple object.{ "width": 1280, "height": 720 }
{ "width": 1920, "height": 1080 }
{ "width": 3840, "height": 2160 }
-
Create array
This is object in array.[{ "width": 1280, "height": 720 }, { "width": 1920, "height": 1080 }, { "width": 3840, "height": 2160 }]
-
Create object as root
This is array in object.{ "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": [{ "width": 1280, "height": 720 }, { "width": 1920, "height": 1080 }, { "width": 3840, "height": 2160 }] }
-
-
Target structure
[{ "id": 0, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }, { "id": 1, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }]
-
Create 2 arrays
This is simple array.["abc", 123, true, false, null]
["abc", 123, true, false, null]
-
Create 2 objects
This is array in object.{ "id": 1, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }
{ "id": 0, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }
-
Create array as root
This is object in array.[{ "id": 0, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }, { "id": 1, "version": "v5.0-dev-3202-ga2d5041492-dirty", "cores": 2, "array": ["abc", 123, true, false, null] }]
-
This is a sample JSON data set.
https://opensource.adobe.com/Spry/samples/data_region/JSONDataSetSample.html