在C語言中解析json多層,需要用到相應的JSON庫。
例子代碼如下: #include#include #include #include "cJSON.h" int main() { char* json_string = "{\"name\":\"Jack\", \"age\":20, \"hobby\":{\"music\":\"rock\", \"food\":\"pizza\"}}"; cJSON* root = cJSON_Parse(json_string); if (!root) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; } cJSON* name = cJSON_GetObjectItem(root, "name"); if (name) printf("name: %s\n", name->valuestring); cJSON* age = cJSON_GetObjectItem(root, "age"); if (age) printf("age: %d\n", age->valueint); cJSON* hobby = cJSON_GetObjectItem(root, "hobby"); if (hobby) { cJSON* music = cJSON_GetObjectItem(hobby, "music"); if (music) printf("music: %s\n", music->valuestring); cJSON* food = cJSON_GetObjectItem(hobby, "food"); if (food) printf("food: %s\n", food->valuestring); } cJSON_Delete(root); return 0; }
其中,我們使用了cJSON這個JSON庫,它包括解析JSON的功能,同時也可以生成JSON。
在代碼中,我們首先在一個json_string中存儲要解析的JSON字符串。
char* json_string = "{\"name\":\"Jack\", \"age\":20, \"hobby\":{\"music\":\"rock\", \"food\":\"pizza\"}}";
接下來,我們通過cJSON_Parse()函數將JSON字符串解析成cJSON結構體。
cJSON* root = cJSON_Parse(json_string);
如果解析失敗,返回null,我們需要檢查返回值,并使用cJSON_GetErrorPtr()函數獲取失敗信息。
if (!root) { printf("Error before: [%s]\n", cJSON_GetErrorPtr()); return 1; }
我們可以通過cJSON_GetObjectItem()函數獲取JSON中的鍵值對。
cJSON* name = cJSON_GetObjectItem(root, "name"); if (name) printf("name: %s\n", name->valuestring);
其中,valuestring表示字符串值,valueint表示整數值。
對于多層JSON,則可以通過嵌套使用cJSON_GetObjectItem()函數來獲取值。
cJSON* hobby = cJSON_GetObjectItem(root, "hobby"); if (hobby) { cJSON* music = cJSON_GetObjectItem(hobby, "music"); if (music) printf("music: %s\n", music->valuestring); cJSON* food = cJSON_GetObjectItem(hobby, "food"); if (food) printf("food: %s\n", food->valuestring); }
最后,使用cJSON_Delete()函數釋放內存。
cJSON_Delete(root);