JSON封裝與解碼

2021-10-24 01:23:48 字數 3367 閱讀 9434

cjson為json解析庫,用於構建解析json格式。

json 主頁:

typedef struct cjson  cjson;
cjson結構體為雙向鍊錶,可利用child指標可訪問下一層

type決定了資料項(鍵)型別,valueint對應整形資料,其他類似

string為節點名稱,即:鍵名稱

cjson_createobject(); //建立根資料物件

cjson_addstringtoobject(usr,"name","fengxin"); //在usr根資料中加入string型別的鍵,鍵名為:name,鍵值為:fengxin

cjson_print(usr); //將json形式列印成正常字串形式,因json中的string與普通string不同,需要進行轉換使用

cjson_printunformatted(usr) ; //用法與上同,區別在於該函式轉換的格式不帶\t、\n,不如3轉換後美觀

cjson_delete(usr) ; //記憶體**

cjson_additemtoarray(root, cjson_createstring("hello world")); //在usr根資料中新增string型別的陣列

cjson_additemtoarray(root, cjson_createnumber(10)); //新增整型陣列

將普通json串變成json物件,即建立json root過程

cjson *root;

root = cjson_parse(js_string);

提取關鍵字,從輩分高的祖層開始拿,其次為父層...

例:out=

cjson *json,*json_name,*json_passwd,*json_num;

​json = cjson_parse(out); //解析成json形式

json_name = cjson_getobjectitem( json , "name" );  //獲取鍵值內容

json_passwd = cjson_getobjectitem( json , "passwd" );

json_num = cjson_getobjectitem( json , "num" );

含父層例:s = ,"other":}

char *s = ",\"other\":}";

cjson *root = cjson_parse(s);

if(!root)

cjson *js_list = cjson_getobjectitem(root, "list");

if(!js_list)

printf("list type is %d\n",js_list->type);

cjson *name = cjson_getobjectitem(js_list, "name");

if(!name)

printf("name type is %d\n",name->type);

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

cjson *age = cjson_getobjectitem(js_list, "age");

if(!age)

printf("age type is %d\n", age->type);

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

cjson *js_other = cjson_getobjectitem(root, "other");

if(!js_other)

printf("list type is %d\n",js_other->type);

cjson *js_name = cjson_getobjectitem(js_other, "name");

if(!js_name)

printf("name type is %d\n",js_name->type);

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

if(root)

cjson_delete(root);

return 0;

這裡考慮嚴格,先進行了item判斷,隨後才進行取值

json陣列提取

例:

char *s = "";

cjson *root = cjson_parse(s);

if(!root)

cjson *js_list = cjson_getobjectitem(root, "list");

if(!js_list)

int array_size = cjson_getarraysize(js_list);

printf("array size is %d\n",array_size);

int i = 0;

cjson *item;

for(i=0; i< array_size; i++)

if(root)

cjson_delete(root);

陣列中包含物件的提取

例:,]}

char *s = ",]}";

cjson *root = cjson_parse(s);

if(!root)

cjson *js_list = cjson_getobjectitem(root, "list");

if(!js_list)

int array_size = cjson_getarraysize(js_list);

printf("array size is %d\n",array_size);

int i = 0;

cjson *item,*it, *js_name, *js_age;

char *p  = null;

for(i=0; i< array_size; i++)

p = cjson_printunformatted(item);

it = cjson_parse(p);

if(!it)

continue ;

js_name = cjson_getobjectitem(it, "name");

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

js_age = cjson_getobjectitem(it, "age");

printf("age is %d\n",js_age->valueint); }

if(root)

cjson_delete(root);

CURL方法封裝 與JSON格式返回封裝

封裝curl的呼叫介面,post的請求方式 param url param requeststring param int timeout return bool mixed function docurlpostrequest url,requeststring,timeout 5,json 1 ...

編譯碼JSON資料

package main import fmt encoding json log type book struct func main ituring.com.cn true,9.99,b,json.marshal gobook log.printf b v n b comparedbytearr...

JSON物件的封裝與解析

一 解析json物件 表結構資訊物件,json格式,名稱為tableobj try 二 封裝json物件 根據表名獲取表結構資訊 param tablename 表名 return 表結構資訊物件 json格式 jsonobject tableinfoobj new jsonobject strin...