我是靠谱客的博主 着急黑裤,最近开发中收集的这篇文章主要介绍cJson使用的简单例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

cJson 结构体简要说明

/* The cJSON structure: */
typedef struct cJSON {
struct cJSON *next,*prev;
/* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
struct cJSON *child;
/* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
int type;
/* The type of the item, as above. */
char *valuestring;
/* The item's string, if type==cJSON_String */
int valueint;
/* The item's number, if type==cJSON_Number */
double valuedouble;
/* The item's number, if type==cJSON_Number */
char *string;
/* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
} cJSON;

说明:
1、cJSON是使用链表来存储数据的,其访问方式很像一颗树。每一个节点可以有兄弟节点,通过next/prev指针来查找,它类似双向链表;每个节点也可以有孩子节点,通过child指针来访问,进入下一层。只有节点是对象或数组时才可以有孩子节点。
2、type是键(key)的类型,一共有7种取值,分别是:False,Ture,NULL,Number,String,Array,Object。
若是Number类型,则valueint或valuedouble中存储着值。若期望的是int,则访问valueint,若期望的是double,则访问valuedouble,可以得到值。
若是String类型的,则valuestring中存储着值,可以访问valuestring得到值。
3、string中存放的是这个节点的名字,可理解为key的名称。

cJson 创建jsonObject并解析

//测试Json的结构体
struct JsonTest{
int id;
char cName[32];
float
fValue;
};
void TestJsonObject(){
//测试cJson 创建Json对象
JsonTest jsonObject = { 1, "geekCode", 0.2f };
cJSON *root, *object;
char *result;//生成的结果
int i;
root = cJSON_CreateObject();
object = cJSON_CreateObject();
cJSON_AddNumberToObject(object, "id", jsonObject.id);
cJSON_AddStringToObject(object, "name", jsonObject.cName);
cJSON_AddNumberToObject(object, "value", jsonObject.fValue);
cJSON_AddNumberToObject(root, "id", jsonObject.id);
cJSON_AddStringToObject(root, "name", jsonObject.cName);
cJSON_AddNumberToObject(root, "value", jsonObject.fValue);
cJSON_AddItemToObject(root, "object", object);
result = cJSON_Print(root);
cJSON_Delete(root);
printf("生成Json:n%sn", result);
//解析Json对象
root = cJSON_Parse(result);
if (!root) {
printf("Error before: [%s]n", cJSON_GetErrorPtr());
return ;
}
object = cJSON_GetObjectItem(root, "object");
if (!object){
cJSON_Delete(root);
return ;
}
JsonTest objectJson;
JsonTest rootJson;
//解析item
cJSON *item;
printf("解析过程:n");
//解析到objectJson
item = cJSON_GetObjectItem(object, "id");
printf("Item: type=%d, key is %s, valueint=%dn", item->type, item->string, item->valueint);
objectJson.id = item->valueint;
item = cJSON_GetObjectItem(object, "name");
printf("Item: type=%d, key is %s, valuestring=%sn", item->type, item->string, item->valuestring);
strcpy(objectJson.cName, item->string);
item = cJSON_GetObjectItem(object, "value");
printf("Item: type=%d, key is %s, valuedouble=%2fn", item->type, item->string, item->valuedouble);
objectJson.fValue = item->valuedouble;
//解析到rootJson
item = cJSON_GetObjectItem(root, "id");
rootJson.id = item->valueint;
item = cJSON_GetObjectItem(root, "name");
strcpy(rootJson.cName, item->string);
item = cJSON_GetObjectItem(root, "value");
rootJson.fValue = item->valuedouble;
//打印解析结果
printf("解析结果:nroot:n");
printf("ntid:%dntname:%sntvalue:%2fntn", rootJson.id, rootJson.cName, rootJson.fValue);
printf("tobject:nttid:%dnttname:%snttvalue:%2fn", objectJson.id, objectJson.cName, objectJson.fValue);
}
int main(){
//测试创建并解析jsonObject
TestJsonObject();
}

测试结果:
这里写图片描述

cJson 创建jsonArray并解析

void TestJsonArray(){
//测试cJson 创建JsonArray数组
JsonTest jsonObject = { 1, "geekCode", 0.2f };
cJSON *root;
char *result;//生成的结果
const char *names[3] = { "zhang1", "zhagn2", "zhagng3" };
root = cJSON_CreateObject();
cJSON *JsonArray = cJSON_CreateArray();
for (int i = 0; i < 3; i++){
cJSON *ArrayItem = cJSON_CreateObject();
jsonObject.id = i;
cJSON_AddNumberToObject(ArrayItem, "id", jsonObject.id);
cJSON_AddStringToObject(ArrayItem, "name", jsonObject.cName);
cJSON_AddNumberToObject(ArrayItem, "value", jsonObject.fValue);
cJSON_AddItemToArray(JsonArray, ArrayItem);
}
cJSON_AddNumberToObject(root, "id", jsonObject.id);
cJSON_AddStringToObject(root, "name", jsonObject.cName);
cJSON_AddNumberToObject(root, "value", jsonObject.fValue);
cJSON_AddItemToObject(root, "JsonArray", JsonArray);
cJSON_AddItemToObject(root, "names", cJSON_CreateStringArray(names, 3));
//可以创建一下基础类型的json数组
//cJSON *cJSON_CreateIntArray(const int *numbers, int count)
//cJSON *cJSON_CreateFloatArray(const float *numbers, int count)
//cJSON *cJSON_CreateDoubleArray(const double *numbers, int count)
//cJSON *cJSON_CreateStringArray(const char **strings, int count)
result = cJSON_Print(root);
cJSON_Delete(root);
printf("生成JsonArray:n%sn", result);
//解析jsonArray
root = cJSON_Parse(result);
if (!root){
printf("Error before: [%s]n",cJSON_GetErrorPtr());
return;
}
//解析到rootJson
cJSON *item;
JsonTest rootJson;
item = cJSON_GetObjectItem(root, "id");
rootJson.id = item->valueint;
item = cJSON_GetObjectItem(root, "name");
strcpy(rootJson.cName, item->string);
item = cJSON_GetObjectItem(root, "value");
rootJson.fValue = item->valuedouble;
//解析jsonArray
cJSON *Array;
Array = cJSON_GetObjectItem(root, "JsonArray");
int size = 0;
size = cJSON_GetArraySize(Array);
JsonTest *JsonArrays = new JsonTest[size];
for (int i=0; i < size; i++){
cJSON *ArrayItem = cJSON_GetArrayItem(Array,i);
cJSON *ArrayValue = cJSON_GetObjectItem(ArrayItem, "id");
JsonArrays[i].id = ArrayValue->valueint;
ArrayValue = cJSON_GetObjectItem(ArrayItem, "name");
strcpy(JsonArrays[i].cName, ArrayValue->string);
ArrayValue = cJSON_GetObjectItem(ArrayItem, "value");
JsonArrays[i].fValue = ArrayValue->valuedouble;
}
//打印解析结果
printf("解析结果:nroot:n");
printf("ntid:%dntname:%sntvalue:%2fntn", rootJson.id, rootJson.cName, rootJson.fValue);
printf("tJsonArray:n");
for (int i = 0; i < size; i++){
printf("ttid:%dnttname:%snttvalue:%2fn", JsonArrays[i].id, JsonArrays[i].cName, JsonArrays[i].fValue);
printf("tt------n");
}
}
int main(){
//测试创建并解析jsonObject
TestJsonObject();
}

测试结果
这里写图片描述

希望对您有所帮助!

最后

以上就是着急黑裤为你收集整理的cJson使用的简单例子的全部内容,希望文章能够帮你解决cJson使用的简单例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部