C語言中解析JSON數據是一項非常重要的技能。在本文中,我們將介紹兩種基本的方法用來解析兩層JSON數據。
方法1:使用 cJSON 庫
cJSON *json = cJSON_Parse(s); //s為待解析的JSON數據 if(!json){ printf("Error before: [%s]\n", cJSON_GetErrorPtr()); }else{ cJSON *data = cJSON_GetObjectItemCaseSensitive(json, "data"); if(cJSON_IsArray(data)){ cJSON_ArrayForEach(item, data){ cJSON *id = cJSON_GetObjectItemCaseSensitive(item, "id"); cJSON *name = cJSON_GetObjectItemCaseSensitive(item, "name"); printf("id: %d, name: %s\n", id->valueint, name->valuestring); } } cJSON_Delete(json); }
在上述代碼中,我們使用 cJSON 庫來解析 JSON 數據。首先,我們將 JSON 數據字符串傳遞給 cJSON_Parse 函數,并檢查是否解析成功。接下來,我們使用 cJSON_GetObjectItemCaseSensitive 函數找到 "data" 對象的值,并使用 cJSON_IsArray 函數判斷其是否為一個數組類型。如果是,則使用 cJSON_ArrayForEach 函數遍歷數組中的每一個元素,然后再次使用 cJSON_GetObjectItemCaseSensitive 函數找到該元素的 "id" 和 "name" 值,并將它們輸出到控制臺上。
方法2:使用 jsmn 庫
int r; jsmn_parser p; jsmntok_t t[128]; // t 為解析后的 JSON 令牌 jsmn_init(&p); r = jsmn_parse(&p, s, strlen(s), t, sizeof(t)/sizeof(t[0])); //s為待解析的JSON數據 if(r< 0){ printf("Failed to parse JSON: %d\n", r); }else{ int i; int size = r; for(i=1; i上述代碼展示了使用 jsmn 庫解析 JSON 數據的方法。首先,我們需要定義一個 jsmn_parser 對象和一個 jsmntok_t 對象數組,用來存放解析后的 JSON 令牌。接下來,我們通過調用 jsmn_parse 函數來對 JSON 數據進行解析,并檢查解析結果是否正確。如果一切順利,我們可以使用遍歷令牌的方式來獲取 JSON 數據的值,并輸出到控制臺上。在本方法中,我們通過判斷令牌的類型和值的內容來定位需要的 "data" 數組,并通過遍歷令牌來獲取數組元素中的值。
上一篇db2中json串