一個C語言json庫,支持解析和構造,支持windows和linux

<p>該json庫是一個cJSON的改進版本。</p> <p>例程</p> <p>#include &quot;../json.h&quot;</p> <p>void doit(char *text) <br />{ <br />&#160;&#160;&#160; char *out;json_ht json; <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; json=json_parse(text); <br />&#160;&#160;&#160; if (!json) {printf(&quot;Error before: [%s]\n&quot;,json_error_get());} <br />&#160;&#160;&#160; else <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; out=json_print(json,1); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; printf(&quot;%s\n&quot;,out); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; free(out); <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; json_delete(json); <br />}</p> <p>void dofile(char *filename) <br />{ <br />&#160;&#160;&#160; FILE *f;long len;char *data;&#160;&#160;&#160; <br />&#160;&#160;&#160; f=fopen(filename,&quot;rb&quot;);fseek(f,0,SEEK_END);len=ftell(f);fseek(f,0,SEEK_SET); <br />&#160;&#160;&#160; data=(char*)malloc(JALIGN(len+1,4));fread(data,1,len,f);fclose(f); <br />&#160;&#160;&#160; doit(data); <br />&#160;&#160;&#160; free(data); <br />}</p> <p>struct record <br />{ <br />&#160;&#160;&#160; const char *precision; <br />&#160;&#160;&#160; double lat,lon; <br />&#160;&#160;&#160; const char *address,*city,*state,*zip,*country; <br />};</p> <p>void create_objects() <br />{ <br />&#160;&#160;&#160; json_ht root,fmt,img,thm,fld;char *out;int i; <br />&#160;&#160;&#160; const char *strings[7]={&quot;Sunday&quot;,&quot;Monday&quot;,&quot;Tuesday&quot;,&quot;Wednesday&quot;,&quot;Thursday&quot;,&quot;Friday&quot;,&quot;Saturday&quot;}; <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; int numbers[3][3]={{0,-1,0},{1,0,0},{0,0,1}}; <br />&#160;&#160;&#160; int ids[4]={116,943,234,38793}; <br />&#160;&#160;&#160; struct record fields[2]= <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&quot;zip&quot;,37.7668,-1.223959e+2,&quot;&quot;,&quot;SAN FRANCISCO&quot;,&quot;CA&quot;,&quot;94107&quot;,&quot;US&quot;}, <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&quot;zip&quot;,37.371991,-1.22026e+2,&quot;&quot;,&quot;SUNNYVALE&quot;,&quot;CA&quot;,&quot;94085&quot;,&quot;US&quot;} <br />&#160;&#160;&#160; };</p> <p>&#160;&#160;&#160; root=json_object_new();&#160;&#160;&#160; <br />&#160;&#160;&#160; json_object_add(root, &quot;name&quot;, json_string_new(&quot;Jack (\&quot;Bee\&quot;) Nimble&quot;)); <br />&#160;&#160;&#160; json_object_add(root, &quot;format&quot;, fmt=json_object_new()); <br />&#160;&#160;&#160; json_object_add(fmt,&quot;type&quot;,json_string_new(&quot;rect&quot;)); <br />&#160;&#160;&#160; json_object_add(fmt,&quot;width&quot;,json_number_new(1920)); <br />&#160;&#160;&#160; json_object_add(fmt,&quot;height&quot;,json_number_new(1080)); <br />&#160;&#160;&#160; json_object_add (fmt,&quot;interlace&quot;,json_false_new()); <br />&#160;&#160;&#160; json_object_add(fmt,&quot;frame rate&quot;,json_number_new(24)); <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; out=json_print(root,1);&#160;&#160;&#160; <br />&#160;&#160;&#160; json_delete(root);&#160;&#160;&#160; <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;,out);&#160;&#160;&#160; <br />&#160;&#160;&#160; free(out);</p> <p>&#160;&#160;&#160; root=json_array_string_new(strings,7); <br />&#160;&#160;&#160; out=json_print(root,1);&#160;&#160;&#160; <br />&#160;&#160;&#160; json_delete(root);&#160;&#160;&#160; <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;,out);&#160;&#160;&#160; <br />&#160;&#160;&#160; free(out);</p> <p>&#160;&#160;&#160; root=json_array_new(); <br />&#160;&#160;&#160; for (i=0;i&lt;3;i++) <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_array_add(root,json_array_int_new(numbers[i],3)); <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; out=json_print(root,1);&#160;&#160;&#160; <br />&#160;&#160;&#160; json_delete(root);&#160;&#160;&#160; <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;,out);&#160;&#160;&#160; <br />&#160;&#160;&#160; free(out);</p> <p>&#160;&#160;&#160; root=json_object_new(); <br />&#160;&#160;&#160; json_object_add(root, &quot;Image&quot;, img=json_object_new()); <br />&#160;&#160;&#160; json_object_add(img,&quot;Width&quot;,json_number_new(800)); <br />&#160;&#160;&#160; json_object_add(img,&quot;Height&quot;,json_number_new(600)); <br />&#160;&#160;&#160; json_object_add(img,&quot;Title&quot;,json_string_new(&quot;View from 15th Floor&quot;)); <br />&#160;&#160;&#160; json_object_add(img, &quot;Thumbnail&quot;, thm=json_object_new()); <br />&#160;&#160;&#160; json_object_add(thm, &quot;Url&quot;, json_string_new(&quot;http:/*www.example.com/image/481989943&quot;)); <br />&#160;&#160;&#160; json_object_add_number(thm,&quot;Height&quot;,125); <br />&#160;&#160;&#160; json_object_add(thm,&quot;Width&quot;,json_string_new(&quot;100&quot;)); <br />&#160;&#160;&#160; json_object_add(img,&quot;IDs&quot;, json_array_int_new(ids,4)); <br />&#160;&#160;&#160; out=json_print(root,1);&#160;&#160;&#160; <br />&#160;&#160;&#160; json_delete(root);&#160;&#160;&#160; <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;,out);&#160;&#160;&#160; <br />&#160;&#160;&#160; free(out);</p> <p>&#160;&#160;&#160; root=json_array_new(); <br />&#160;&#160;&#160; for (i=0;i&lt;2;i++) <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_array_add(root,fld=json_object_new()); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;precision&quot;, json_string_new(fields[i].precision)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;Latitude&quot;, json_number_new(fields[i].lat)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;Longitude&quot;, json_number_new(fields[i].lon)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;Address&quot;, json_string_new(fields[i].address)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;City&quot;, json_string_new(fields[i].city)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;State&quot;, json_string_new(fields[i].state)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;Zip&quot;, json_string_new(fields[i].zip)); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_object_add(fld, &quot;Country&quot;, json_string_new(fields[i].country)); <br />&#160;&#160;&#160; }&#160;&#160;&#160; <br />&#160;&#160;&#160; //json_object_replace(json_array_get(root,1),&quot;City&quot;,json_int_array(ids,4));&#160;&#160;&#160; <br />&#160;&#160;&#160; out=json_print(root,1);&#160;&#160;&#160; <br />&#160;&#160;&#160; json_delete(root);&#160;&#160;&#160; <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;,out);&#160;&#160;&#160; <br />&#160;&#160;&#160; free(out);</p> <p>}</p> <p>void test() <br />{ <br />&#160;&#160;&#160; json_ht pJsonRoot = NULL,tf=NULL;</p> <p>&#160;&#160;&#160; pJsonRoot = json_object_new(); <br />&#160;&#160;&#160; if(NULL == pJsonRoot) <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return ; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; json_object_add_string(pJsonRoot, &quot;hello&quot;, &quot;hello world&quot;); <br />&#160;&#160;&#160; json_object_add_number(pJsonRoot, &quot;number&quot;, 10010); <br />&#160;&#160;&#160; json_object_add_bool(pJsonRoot, &quot;bool&quot;, 1); <br />&#160;&#160;&#160; json_ht pSubJson = NULL; <br />&#160;&#160;&#160; pSubJson = json_object_new(); <br />&#160;&#160;&#160; if(NULL == pSubJson) <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_delete(pJsonRoot); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return ; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; json_object_add_string(pSubJson, &quot;subjsonobj&quot;, &quot;a sub json string&quot;); <br />&#160;&#160;&#160; json_object_add(pJsonRoot, &quot;subobj&quot;, pSubJson); <br />&#160;&#160;&#160; json_saveto_file(pJsonRoot,&quot;test1.json&quot;); <br />&#160;&#160;&#160; json_delete(pJsonRoot); <br />&#160;&#160;&#160; printf(&quot;==========================================json_parse_file====================================================\n&quot;); <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; tf = json_parse_file(&quot;test1.json&quot;); <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; char * p = json_print(tf,1); <br />&#160;&#160;&#160; if(NULL == p) <br />&#160;&#160;&#160; { <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; json_delete(tf); <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return ; <br />&#160;&#160;&#160; } <br />&#160;&#160;&#160; printf(&quot;%s\n&quot;, p); <br />&#160;&#160;&#160; printf(&quot;============================================================================================================\n&quot;); <br />&#160;&#160;&#160; json_delete(tf); <br />}</p> <p>int main (int argc, const char * argv[]) <br />{ <br />&#160;&#160;&#160; char text1[]=&quot;{\n\&quot;name\&quot;: \&quot;Jack (\\\&quot;Bee\\\&quot;) Nimble\&quot;, \n\&quot;format\&quot;: {\&quot;type\&quot;:&#160;&#160;&#160;&#160;&#160;&#160; \&quot;rect\&quot;, \n\&quot;width\&quot;:&#160;&#160;&#160;&#160;&#160; 1920, \n\&quot;height\&quot;:&#160;&#160;&#160;&#160; 1080, \n\&quot;interlace\&quot;:&#160; false,\&quot;frame rate\&quot;: 24\n}\n}&quot;;&#160;&#160;&#160; <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; doit(text1); <br />&#160;&#160;&#160; test(); <br />&#160;&#160;&#160; create_objects(); <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; return 0; <br />}</p> <p> <br />官方博客:http://www.wangzugang.net/blog/json.html</p> <p> <br />源碼地址:https://github.com/wzugang/json</p>html

相關文章
相關標籤/搜索