RT-Thread包含cJSON包,但是并没有教程,结合网上的资料,以组成一下json字符串为例,记录一下使用笔记。
{
"datastreams": [{
"id": "location",
"datapoints":[{
"value":{
"lat": 0,
"lon": 0
}
}]
}]
}
cJSON库所有数据都用cJSON指针来保存。
cJSON对象使用大括号包着,数组使用中括号包着,字符串对象用双引号包着,数值则不用。
使用cJSON_CreateNumber
、cJSON_CreateString
可以把字符串和数字转换成JSON的字段和内容,使用cJSON_CreateObject
和cJSON_CreateArray
分别创建对象和数组,使用cJSON_AddItemToObject
和cJSON_AddItemToArray
可以向对象和数组添加条目。
最终使用cJSON_Print
生成json字符串(数组)。
cJSON *clat = cJSON_CreateNumber(lat);
cJSON *clon = cJSON_CreateNumber(lon);
cJSON *cvalue = cJSON_CreateObject();
cJSON_AddItemToObject(cvalue, "lat", clat);
cJSON_AddItemToObject(cvalue, "lon", clon);
cJSON *cdatapoint1 = cJSON_CreateObject();
cJSON_AddItemToObject(cdatapoint1, "value", cvalue);
cJSON *cdatapoints = cJSON_CreateArray();
cJSON_AddItemToArray(cdatapoints, cdatapoint1);
cJSON *cdatastream1 = cJSON_CreateObject();
cJSON *cid = cJSON_CreateString("location");
cJSON_AddItemToObject(cdatastream1, "id", cid);
cJSON_AddItemToObject(cdatastream1, "datapoints", cdatapoints);
cJSON *cdatastreams = cJSON_CreateArray();
cJSON_AddItemToArray(cdatastreams, cdatastream1);
cJSON *cupload = cJSON_CreateObject();
cJSON_AddItemToObject(cupload, "datastreams", cdatastreams);
LOG_D(cJSON_Print(cupload));