这是cJSON源码里的例子,我觉得非常全面就贴出来留作备案.方便查找.
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
//#include "cJSON.c" 也可以包含C文件,就不使用库了.
/* Parse text to JSON,then render back to text,and print! */
void doit(char *text)
{
char *out;cJSON *json;
json=cJSON_Parse(text);
if (!json) {printf("Error before: [%s]\n",cJSON_GetErrorPtr());}
else
{
out=cJSON_Print(json);
cJSON_Delete(json);
printf("%s\n",out);
free(out);
}
}
/* Read a file,parse,render back,etc. */
void dofile(char *filename)
{
FILE *f=fopen(filename,"rb");
fseek(f,SEEK_END);
long len=ftell(f);
fseek(f,SEEK_SET);
char *data=(char*)malloc(len+1);
fread(data,1,len,f);
fclose(f);
doit(data);
free(data);
}
/* U example datatype. */
struct record {const char *precision;double lat,lon;const char *address,*city,*state,*zip,*country; }; /* Create a bunch of objects as demonstration. */ void create_objects() { cJSON *root,*fmt,*img,*thm,*fld;char *out;int i; /* declare a few. */ /* Here we construct some JSON standards,from the JSON site. */ /* Our "Video" datatype: */ root=cJSON_CreateObject(); cJSON_AddItemToObject(root,"name",cJSON_CreateString("Jack (\"Bee\") Nimble")); cJSON_AddItemToObject(root,"format",fmt=cJSON_CreateObject()); cJSON_AddStringToObject(fmt,"type","rect"); cJSON_AddNumberToObject(fmt,"width",1920); cJSON_AddNumberToObject(fmt,"height",1080); cJSON_AddFalseToObject (fmt,"interlace"); cJSON_AddNumberToObject(fmt,"frame rate",24); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Print to text,Delete the cJSON,print it,release the string. */ /* Our "days of the week" array: */ const char *strings[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; root=cJSON_CreateStringArray(strings,7); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our matrix: */ int numbers[3][3]={{0,-1,0},{1,{0,1}}; root=cJSON_CreateArray(); for (i=0;i<3;i++) cJSON_AddItemToArray(root,cJSON_CreateIntArray(numbers[i],3)); /* cJSON_ReplaceItemInArray(root,cJSON_CreateString("Replacement")); */ out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our "gallery" item: */ int ids[4]={116,943,234,38793}; root=cJSON_CreateObject(); cJSON_AddItemToObject(root,"Image",img=cJSON_CreateObject()); cJSON_AddNumberToObject(img,"Width",800); cJSON_AddNumberToObject(img,"Height",600); cJSON_AddStringToObject(img,"Title","View from 15th Floor"); cJSON_AddItemToObject(img,"Thumbnail",thm=cJSON_CreateObject()); cJSON_AddStringToObject(thm,"Url","http:/*www.example.com/image/481989943"); cJSON_AddNumberToObject(thm,125); cJSON_AddStringToObject(thm,"100"); cJSON_AddItemToObject(img,"IDs",cJSON_CreateIntArray(ids,4)); out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); /* Our array of "records": */ struct record fields[2]={ {"zip",37.7668,-1.223959e+2,"","SAN FRANCISCO","CA","94107","US"},{"zip",37.371991,-1.22026e+2,"SUNNYVALE","94085","US"}}; root=cJSON_CreateArray(); for (i=0;i<2;i++) { cJSON_AddItemToArray(root,fld=cJSON_CreateObject()); cJSON_AddStringToObject(fld,"precision",fields[i].precision); cJSON_AddNumberToObject(fld,"Latitude",fields[i].lat); cJSON_AddNumberToObject(fld,"Longitude",fields[i].lon); cJSON_AddStringToObject(fld,"Address",fields[i].address); cJSON_AddStringToObject(fld,"City",fields[i].city); cJSON_AddStringToObject(fld,"State",fields[i].state); cJSON_AddStringToObject(fld,fields[i].state); cJSON_AddStringToObject(fld,"Zip",fields[i].zip); cJSON_AddStringToObject(fld,"Country",fields[i].country); } /* cJSON_ReplaceItemInObject(cJSON_GetArrayItem(root,1),4)); */ out=cJSON_Print(root); cJSON_Delete(root); printf("%s\n",out); free(out); } int main (int argc,const char * argv[]) { /* a bunch of json: */ 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}"; char text2[]="[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]"; char text3[]="[\n [0,0],\n [1,\n [0,1]\n ]\n"; char text4[]="{\n \"Image\": {\n \"Width\": 800,\n \"Height\": 600,\n \"Title\": \"View from 15th Floor\",\n \"Thumbnail\": {\n \"Url\": \"http:/*www.example.com/image/481989943\",\n \"Height\": 125,\n \"Width\": \"100\"\n },\n \"IDs\": [116,38793]\n }\n }"; char text5[]="[\n {\n \"precision\": \"zip\",\n \"Latitude\": 37.7668,\n \"Longitude\": -122.3959,\n \"Address\": \"\",\n \"City\": \"SAN FRANCISCO\",\n \"State\": \"CA\",\n \"Zip\": \"94107\",\n \"Country\": \"US\"\n },\n {\n \"precision\": \"zip\",\n \"Latitude\": 37.371991,\n \"Longitude\": -122.026020,\n \"City\": \"SUNNYVALE\",\n \"Zip\": \"94085\",\n \"Country\": \"US\"\n }\n ]"; /* Process each json textblock by parsing,then rebuilding: */ // doit(text1); // doit(text2); // doit(text3); // doit(text4); // doit(text5); /* Parse standard testfiles: */ // dofile("./test1"); /* dofile("../../tests/test2"); */ /* dofile("../../tests/test3"); */ /* dofile("../../tests/test4"); */ /* dofile("../../tests/test5"); */ /* Now some samplecode for building objects concisely: */ // create_objects(); return 0; }