cJson实例解析

cJSON下载


1)可到gitbub上下载 地址:https://github.com/kbranigan/cJSON

 

2)只需将cJSON.h 和 cJSON.c 文件拷贝到所需使用的目录即可使用

 

 

实例


 

{

     name: "tom",

     age: 18,

     man: true

}

 

注:

     1) key永远是string类型

     2) 这里的18是双精度,在json里都用number来表示

 

创建cJSON对象以及解包


1)建立跟节点:root = { }

 

cJSON *root = cJSON_CreateObject();

 

2)往跟节点里添加数据:

 

//root = {name: "tom"}

cJSON_AddItemToObject(root, "name", cJSON_CreateString("tom"));

 

//root = {name: "tom", age: 18}

cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(18));

 

//root = {name: "tom", age: 18, man: true}

cJSON_AddItemToObject(root, "man", cJSON_CreateBool(1));

 

3)将json对象转换为字符串(转化为连续的空间方便传输)

 

char *p = cJSON_Print(root);

 

4)释放cJSON对象

 

cJSON_Delete(root);//释放完跟节点,子节点自动释放

free(p);     //这个一定要释放,因为cJSON_Print是malloc内存的

 

5)将字符串类型json转换为cJSON数据结构, 解析

 

char *json_buffer;

cJSON *root = cJSON_Parse(json_buffer);

 

6)解析出数据

 

cJSON *name = cJSON_GetObjectItem(root, "name");

printf("name = %s\n", name->valuestring);     //name = tom

 

cJSON *age = cJSON_GetObjectItem(root, "age");

printf("age = %s\n", age->valueint);     //age = 18

 

7)编译:要加上cJSON.c文件和数学库

 

gcc json_test.c cJSON.c -lm

 

 

例一(json嵌套)


 

{

     name: "tom",

     age: 18

     mobile: {

          branch: "apple",

          version: 6

     }

}

 

代码:

 

#include "../h.h"

#include "cJSON.h"

 

char *json_buffer;

 

void packet()

{

    cJSON *root = cJSON_CreateObject();

    cJSON_AddItemToObject(root, "name", cJSON_CreateString("tom"));

    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(18));

 

    cJSON *mobile = cJSON_CreateObject();

    cJSON_AddItemToObject(mobile, "branch", cJSON_CreateString("apple"));

    cJSON_AddItemToObject(mobile, "version", cJSON_CreateNumber(6));

 

    cJSON_AddItemToObject(root, "mobile", mobile);

 

    json_buffer = cJSON_Print(root);

 

    printf("%s\n", json_buffer);

 

    cJSON_Delete(root);

}

 

void unpacket()

{

    cJSON *root = cJSON_Parse(json_buffer);

 

    cJSON *name = cJSON_GetObjectItem(root, "name");

    printf("name = %s\n", name->valuestring);

 

    cJSON *age = cJSON_GetObjectItem(root, "age");

    printf("age = %d\n", age->valueint);

 

    cJSON *mobile = cJSON_GetObjectItem(root, "mobile");

 

    cJSON *branch = cJSON_GetObjectItem(mobile, "branch");

    printf("branch = %s\n", branch->valuestring);

 

    cJSON *version = cJSON_GetObjectItem(mobile, "version");

    printf("version = %d\n", version->valueint);

}

 

int main()

{

    packet();     //打包

 

    unpacket();     //解包

 

    return 0;

}

 

 

例二(数组)


 

{

     name: "tom",

     age: 18,

     score: [91, 100, 80],

     mobile: null

}

 

代码:

 

#include "../h.h"

#include "cJSON.h"

 

char *json_buffer;

 

void packet()

{

    cJSON *root = cJSON_CreateObject();

    cJSON_AddItemToObject(root, "name", cJSON_CreateString("tom"));

    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(18));

 

    cJSON *score = cJSON_CreateArray();

    cJSON_AddItemToArray(score, cJSON_CreateNumber(91));

    cJSON_AddItemToArray(score, cJSON_CreateNumber(100));

    cJSON_AddItemToArray(score, cJSON_CreateNumber(80));

 

    cJSON_AddItemToObject(root, "score", score);

    cJSON_AddItemToObject(root,"mobile", cJSON_CreateNull());

 

    json_buffer = cJSON_Print(root);

    cJSON_Delete(root);

 

    printf("%s\n", json_buffer);

}

 

void unpacket()

{

    cJSON *root = cJSON_Parse(json_buffer);

 

    cJSON *name = cJSON_GetObjectItem(root, "name");

    printf("name = %s\n", name->valuestring);

 

    cJSON *age = cJSON_GetObjectItem(root, "age");

    printf("age = %d\n", age->valueint);

 

    cJSON *score = cJSON_GetObjectItem(root, "score");

 

    cJSON *s1 = cJSON_GetArrayItem(score, 0);

    printf("s1 = %d\n", s1->valueint);

    cJSON *s2 = cJSON_GetArrayItem(score, 1);

    printf("s2 = %d\n", s2->valueint);

    cJSON *s3 = cJSON_GetArrayItem(score, 2);

    printf("s3 = %d\n", s3->valueint);

}

 

int main()

{

    packet();

 

    unpacket();

 

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值