cJSON庫介紹及程式設計例項
阿新 • • 發佈:2019-02-12
JSON是一種輕量級的資料交換格式,基於JavaScript的一個子集。JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣。這些特性使JSON成為理想的資料交換語言。易於人閱讀與編寫,同時也易於機器解析和生成。
cJSON是一個超輕巧,攜帶方便,單檔案,簡單的可以作為ANSI-C標準的JSON解析器。
cJSON下載地址:點選開啟連結
檢視cJSON程式碼可以看到,cJSON結構體如下:
typedef struct cJSON { struct cJSON *next,*prev; struct cJSON *child; int type; char *valuestring; int valueint; double valuedouble; char *string; } cJSON;
cJSON以雙鏈表的形式儲存。
共有7種類型:
/* cJSON Types: */
#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
cJSON例項:
#include<stdio.h> #include<stdlib.h> #include"cJSON.h" int main(int argc,const char *argv[]) { cJSON *root,*fmt,*json,*format; char *out; int i; //建立JSON字串 root = cJSON_CreateObject(); cJSON_AddItemToObject(root,"name",cJSON_CreateString("Jack")); cJSON_AddItemToObject(root,"format",fmt = cJSON_CreateObject()); cJSON_AddStringToObject(fmt,"type","rect"); cJSON_AddNumberToObject(fmt,"width",1000); cJSON_AddNumberToObject(fmt,"height",2000.123); // cJSON_AddFalseToObject(fmt,"interlace"); cJSON_AddNumberToObject(fmt,"frame rate",24); out = cJSON_Print(root); //out中儲存的是JSON格式的字串 cJSON_Delete(root); //刪除cJSON printf("%s\n",out); //終端列印輸出 json = cJSON_Parse(out); //解析JSON格式的字串 free(out); //釋放字串空間 if(!json) { printf("Error before:[%s]\n",cJSON_GetErrorPtr()); } else { //提取出各個資料並列印輸出 char *name = cJSON_GetObjectItem(json,"name")->valuestring; printf("name: %s\n",name); format = cJSON_GetObjectItem(json,"format"); char *type = cJSON_GetObjectItem(format,"type")->valuestring; printf("type: %s\n",type); int width = cJSON_GetObjectItem(format,"width")->valueint; printf("width: %d\n",width); double height = cJSON_GetObjectItem(format,"height")->valuedouble; printf("width: %f\n",height); int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint; printf("framerate: %d\n",framerate); } }
編譯:把cJSON.c和cJSON.h放在編寫程式碼目錄下,同時編譯cJSON和工作程式碼:gcc cJSON.c test.c -o test -lm
執行結果: