在處理 JSON 數據時,我們經常需要從 JSON 字符串中獲取特定的值。如何使用 C 語言來完成這個任務?我們可以使用 cjson 庫來解析 JSON 字符串并獲取值。
首先,我們需要引入 cjson 庫的頭文件。
#include <cJSON.h>
接著,我們創建一個 cJSON 對象并解析 JSON 字符串。
cJSON *root = cJSON_Parse(json_string);
其中,json_string 是我們要解析的 JSON 字符串。如果解析失敗,root 將為 NULL。
接著,我們可以通過 cJSON 的接口來獲取 JSON 值。
cJSON *item = cJSON_GetObjectItem(root, "key");
這里,我們通過 cJSON_GetObjectItem 函數獲取名為 "key" 的 JSON 值。如果不存在該鍵值,item 將為 NULL。
然后,我們可以通過 cJSON_Value 子結構來獲取 JSON 值的類型及其內容。
if (item != NULL) {
switch (item->type) {
case cJSON_NULL:
printf("null\n");
break;
case cJSON_False:
printf("false\n");
break;
case cJSON_True:
printf("true\n");
break;
case cJSON_Number:
printf("%g\n", item->valuedouble);
break;
case cJSON_String:
printf("%s\n", item->valuestring);
break;
case cJSON_Array:
printf("[%d]\n", cJSON_GetArraySize(item));
break;
case cJSON_Object:
printf("object\n");
break;
}
}
最后,我們需要釋放 cJSON 對象。
cJSON_Delete(root);
完整代碼如下:
#include <stdlib.h>
#include <stdio.h>
#include <cJSON.h>
int main() {
const char *json_string = "{\"null\":null,\"bool\":true,\"num\":123,\"str\":\"hello\",\"arr\":[1,2,3],\"obj\":{\"key\":\"value\"}}";
cJSON *root = cJSON_Parse(json_string);
if (root == NULL) {
printf("parse error\n");
return 1;
}
cJSON *item = cJSON_GetObjectItem(root, "num");
if (item != NULL) {
switch (item->type) {
case cJSON_NULL:
printf("null\n");
break;
case cJSON_False:
printf("false\n");
break;
case cJSON_True:
printf("true\n");
break;
case cJSON_Number:
printf("%g\n", item->valuedouble);
break;
case cJSON_String:
printf("%s\n", item->valuestring);
break;
case cJSON_Array:
printf("[%d]\n", cJSON_GetArraySize(item));
break;
case cJSON_Object:
printf("object\n");
break;
}
}
cJSON_Delete(root);
return 0;
}