在進(jìn)行c程序開發(fā)時(shí),經(jīng)常需要從json數(shù)據(jù)中讀取數(shù)據(jù)并進(jìn)行處理。循環(huán)讀取json中的數(shù)據(jù)是非常重要的一個(gè)基礎(chǔ)操作。下面是一段c語言代碼示例,演示了如何循環(huán)讀取json中的數(shù)據(jù)。
#include <stdio.h> #include <json-c/json.h> int main() { // json數(shù)據(jù)字符串 const char *json_string = "{ \"name\": \"Jack\", \"age\": 25, \"gender\": \"male\" }"; // 解析json數(shù)據(jù) struct json_object *json_obj = json_tokener_parse(json_string); // 獲取json對(duì)象中的鍵值對(duì)數(shù)量 int num_keys = json_object_object_length(json_obj); // 循環(huán)讀取json對(duì)象中的數(shù)據(jù) for (int i = 0; i < num_keys; i++) { // 獲取第i個(gè)鍵值對(duì) const char *key = json_object_get_string(json_object_object_get_idx(json_obj, i)); struct json_object *value = json_object_object_get(json_obj,key); // 獲取值類型并進(jìn)行對(duì)應(yīng)處理 enum json_type value_type = json_object_get_type(value); switch (value_type) { case json_type_null: printf("%s: null\n",key); break; case json_type_boolean: printf("%s: %s\n",key,json_object_get_boolean(value)?"true":"false"); break; case json_type_double: printf("%s: %g\n",key,json_object_get_double(value)); break; case json_type_int: printf("%s: %d\n",key,json_object_get_int(value)); break; case json_type_string: printf("%s: %s\n",key,json_object_get_string(value)); break; case json_type_object: printf("%s: object\n",key); break; case json_type_array: printf("%s: array\n",key); break; } } json_object_put(json_obj); // 釋放json對(duì)象內(nèi)存空間 return 0; }
上述代碼中,首先將json數(shù)據(jù)字符串解析成一個(gè)json對(duì)象,并獲取該對(duì)象中鍵值對(duì)的數(shù)量。然后使用for循環(huán)遍歷鍵值對(duì),獲取鍵值對(duì)的key和value,并根據(jù)value的類型進(jìn)行處理,并打印輸出。