RT-Thread cJSON库的使用

RT-Thread包含cJSON包,但是并没有教程,结合网上的资料,以组成一下json字符串为例,记录一下使用笔记。

{
	"datastreams":  [{
		"id":   "location",
		"datapoints":[{
			 "value":{
			 "lat":  0,
			 "lon":  0
			 }
		}]
	}] 
}

cJSON库所有数据都用cJSON指针来保存。
cJSON对象使用大括号包着,数组使用中括号包着,字符串对象用双引号包着,数值则不用。
使用cJSON_CreateNumbercJSON_CreateString可以把字符串和数字转换成JSON的字段和内容,使用cJSON_CreateObjectcJSON_CreateArray分别创建对象和数组,使用cJSON_AddItemToObjectcJSON_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));

你可能感兴趣的:(rt-thread)