cJson例項解析

2021-07-26 00:11:39 字數 4011 閱讀 6367

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 =

cjson_additemtoobject(root, "name", cjson_createstring("tom"));

//root =

cjson_additemtoobject(root, "age", cjson_createnumber(18));

//root =

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: {

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, "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;

cjson構建 cJSON的構造和解析

對於cjson的使用,我主要是用來模擬遠端伺服器端返回的乙個json型別的目錄結構,客戶端進行獲取並進行解析,把解析出來的目錄按照原本的結構顯示在本地。cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器。cjson結構體 typedef struct cjson...

cJSON的構造和解析

對於cjson的使用,我主要是用來模擬遠端伺服器端返回的乙個 json 型別的目錄結構,客戶端進行獲取並進行解析,把解析出來的目錄按照原本的結構顯示在本地。cjson 是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為 ansi c 標準的json 解析器。進入cjson.h標頭檔案中可以檢視cjson...

json快速入門(cjson解析)

json是儲存和交換文字資訊的語法,與xml類似。json有兩種結構,分別是陣列和物件 json解析環境 cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器,cjson庫包括cjson.h和cjson.c兩個檔案,放入指定目錄直接呼叫就可以了。1.有一對基本的 ...