在C語言中解析JSON嵌套的JSON可以使用第三方庫cJSON。CJSON可以將JSON解析為一個(gè)樹形結(jié)構(gòu),方便遍歷、操作、修改。
#include<stdio.h>
#include<cJSON.h>
int main(){
char *json_string="{\"name\":\"小明\",\"age\":18,\"class\":{\"className\":\"三年二班\",\"teacher\":\"張老師\"}}";
cJSON *root=cJSON_Parse(json_string);
if(!root){
printf("解析失敗!");
return 1;
}
cJSON *name=cJSON_GetObjectItem(root,"name");//獲取根節(jié)點(diǎn)中的"name"對(duì)象
cJSON *age=cJSON_GetObjectItem(root,"age");//獲取根節(jié)點(diǎn)中的"age"對(duì)象
printf("姓名:%s\n年齡:%d\n",name->valuestring,age->valueint);//輸出"name"和"age"
cJSON *class=cJSON_GetObjectItem(root,"class");//獲取根節(jié)點(diǎn)中的"class"對(duì)象
cJSON *classname=cJSON_GetObjectItem(class,"className");//獲取"class"對(duì)象中的"className"對(duì)象
cJSON *teacher=cJSON_GetObjectItem(class,"teacher");//獲取"class"對(duì)象中的"teacher"對(duì)象
printf("班級(jí):%s\n班主任:%s\n",classname->valuestring,teacher->valuestring);//輸出"className"和"teacher"
cJSON_Delete(root);//釋放內(nèi)存
return 0;
}
在上面的例子中,我們定義了一個(gè)JSON字符串,里面包含了一個(gè)"name"和"age"對(duì)象,以及一個(gè)"class"對(duì)象,其中"class"對(duì)象又包含了一個(gè)"className"和"teacher"對(duì)象。通過cJSON_Parse函數(shù)將JSON字符串解析為樹形結(jié)構(gòu),并通過cJSON_GetObjectItem函數(shù)獲取需要的對(duì)象。
如果JSON嵌套的層數(shù)比較深,可以使用遞歸函數(shù)來遍歷整個(gè)樹形結(jié)構(gòu)。使用cJSON庫可以很方便地處理JSON嵌套的JSON。