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...