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