純C/C++ 存取JSON(使用cJSON函式庫)
純C/C++ 存取JSON(使用cJSON函式庫)
資料來源: http://sourceforge.net/projects/cjson/
json官方介绍: https://www.json.org/json-zh.html
cJSON github地址: https://github.com/DaveGamble/cJSON
範例程式
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" char * create1() { cJSON *root,*dir1,*dir2,*dir3; char *out; // 創建json陣列型結構體 root = cJSON_CreateArray(); // 為陣列添加物件 cJSON_AddItemToArray(root,dir1=cJSON_CreateObject()); // 為物件添加字串鍵值對 cJSON_AddStringToObject(dir1,"name","."); cJSON_AddStringToObject(dir1,"path","uploads/"); cJSON_AddStringToObject(dir1,"flag","true"); cJSON_AddItemToArray(root,dir2=cJSON_CreateObject()); cJSON_AddStringToObject(dir2,"name",".."); cJSON_AddStringToObject(dir2,"path","uploads"); cJSON_AddStringToObject(dir2,"flag","true"); cJSON_AddItemToArray(root,dir3=cJSON_CreateObject()); cJSON_AddStringToObject(dir3,"name","wang.txt"); cJSON_AddStringToObject(dir3,"path","uploads/wang.txt"); cJSON_AddStringToObject(dir3,"flag","false"); // 將json結構體轉換為字串 out=cJSON_Print(root); // 刪除 cJSON_Delete(root); return out; } char * create2() { cJSON *root,*dir,*subdir,*dir1,*dir2,*dir3; char *out; root=cJSON_CreateObject(); cJSON_AddItemToObject(root,"Root",dir=cJSON_CreateObject()); cJSON_AddStringToObject(dir,"name","/"); cJSON_AddStringToObject(dir,"path","/"); cJSON_AddStringToObject(dir,"flag","true"); cJSON_AddItemToObject(root,"Child",subdir = cJSON_CreateArray()); cJSON_AddItemToObject(subdir,"dira",dir1=cJSON_CreateObject()); cJSON_AddStringToObject(dir1,"name","."); cJSON_AddStringToObject(dir1,"path","/./"); cJSON_AddStringToObject(dir1,"flag","true"); cJSON_AddItemToObject(subdir,"dira",dir2=cJSON_CreateObject()); cJSON_AddStringToObject(dir2,"name",".."); cJSON_AddStringToObject(dir2,"path","/../"); cJSON_AddStringToObject(dir2,"flag","true"); cJSON_AddItemToObject(subdir,"dira",dir3=cJSON_CreateObject()); cJSON_AddStringToObject(dir3,"name","uploads"); cJSON_AddStringToObject(dir3,"path","/uploads/"); cJSON_AddStringToObject(dir3,"flag","true"); out=cJSON_Print(root); cJSON_Delete(root); return out; } char * create3() { cJSON *root,*img,*thm; char *out; int nums[4]={100,200,300,400}; root=cJSON_CreateObject(); cJSON_AddItemToObject(root, "Root", img=cJSON_CreateObject()); cJSON_AddNumberToObject(img,"key",800); cJSON_AddNumberToObject(img,"value",600); cJSON_AddStringToObject(img,"Title","Sugon"); cJSON_AddItemToObject(img,"child",thm=cJSON_CreateObject()); cJSON_AddNumberToObject(thm,"key",125); cJSON_AddStringToObject(thm,"value","100"); cJSON_AddStringToObject(thm,"Url","www.sugon.com"); cJSON_AddItemToObject(img,"nums", cJSON_CreateIntArray(nums,4)); out=cJSON_Print(root); cJSON_Delete(root); return out; } char * create4() { cJSON *root,*dir1,*dir2; char *out; const char *ro = "Root"; root=cJSON_CreateObject(); cJSON_AddItemToObject(root,ro,dir1=cJSON_CreateArray()); cJSON_AddNumberToObject(dir1,"key",800); cJSON_AddNumberToObject(dir1,"value",600); cJSON_AddStringToObject(dir1,"Title","key and value"); cJSON_AddItemToObject(root,ro,dir2=cJSON_CreateArray()); cJSON_AddNumberToObject(dir2,"value",125); cJSON_AddStringToObject(dir2,"key","100"); cJSON_AddStringToObject(dir2,"Title","value and key"); out=cJSON_Print(root); cJSON_Delete(root); return out; } void parse1(char *out) { cJSON * root,*arrayItem,*item,*name,*path,*flag; int i = 0,size = 0; char *pr = NULL,*na = NULL,*pa = NULL,*fl = NULL; // 將字串解析成json結構體 root = cJSON_Parse(out); // 根據結構體獲取陣列大小 size = cJSON_GetArraySize(root); //printf("%d\n",size); // 遍歷數組 for(i=0;i<size;i++) { //獲取第i個陣列項 arrayItem = cJSON_GetArrayItem(root,i); if(arrayItem) { //printf("%s\n","start......"); //講json結構體轉換成字串 pr = cJSON_Print(arrayItem); item = cJSON_Parse(pr); name = cJSON_GetObjectItem(item,"name"); path = cJSON_GetObjectItem(item,"path"); flag = cJSON_GetObjectItem(item,"flag"); na = cJSON_Print(name); pa = cJSON_Print(path); fl = cJSON_Print(flag); //printf("%s\n",pr); printf("name:%s\n",na); printf("path:%s\n",pa); printf("flag:%s\n\n",fl); } } } void parse2(char *out) { cJSON * root,*Root,*Child,*arrayItem,*item,*name,*path,*flag; int i = 0,size = 0; char *pr = NULL,*na = NULL,*pa = NULL,*fl = NULL; root = cJSON_Parse(out); if(root) { Root = cJSON_GetObjectItem(root,"Root"); if(Root) { name = cJSON_GetObjectItem(Root,"name"); path = cJSON_GetObjectItem(Root,"path"); flag = cJSON_GetObjectItem(Root,"flag"); na = cJSON_Print(name); pa = cJSON_Print(path); fl = cJSON_Print(flag); printf("Root:\n"); printf("name:%s\n",na); printf("path:%s\n",pa); printf("flag:%s\n\n",fl); } Child = cJSON_GetObjectItem(root,"Child"); if(Child) { size = cJSON_GetArraySize(Child); //printf("%d\n",size); printf("Child:\n"); for(i=0;i<size;i++) { arrayItem = cJSON_GetArrayItem(Child,i); if(arrayItem) { //printf("%s\n","start......"); pr = cJSON_Print(arrayItem); item = cJSON_Parse(pr); name = cJSON_GetObjectItem(item,"name"); path = cJSON_GetObjectItem(item,"path"); flag = cJSON_GetObjectItem(item,"flag"); na = cJSON_Print(name); pa = cJSON_Print(path); fl = cJSON_Print(flag); //printf("%s\n",pr); printf("name:%s\n",na); printf("path:%s\n",pa); printf("flag:%s\n\n",fl); } } } } } int main() { char *out1 = create1(); char *out2 = create2(); char *out3 = create3(); char *out4 = create4(); printf("%s\n\n\n",out1); parse1(out1); printf("%s\n\n\n",out2); parse2(out2); printf("%s\n\n\n",out3); printf("%s\n\n\n",out4); return 0; }
相關圖文介紹