在C語言中,我們可以使用json-c這個庫來處理JSON格式的數(shù)據(jù)。使用json-c可以方便地將C數(shù)據(jù)結構轉(zhuǎn)化為JSON格式,也可以將JSON格式的數(shù)據(jù)轉(zhuǎn)化為C數(shù)據(jù)結構。
下面是一個例子,我們先定義一個簡單的JSON格式的數(shù)據(jù):
{ "name": "張三", "age": 20, "score": [90, 80, 85] }
我們可以使用json-c將這個JSON格式的數(shù)據(jù)轉(zhuǎn)化為C數(shù)據(jù)結構:
#includeint main() { const char* json_str = "{\"name\":\"張三\",\"age\":20,\"score\":[90,80,85]}"; struct json_object* obj = json_tokener_parse(json_str); // 獲取"name"字段的值 struct json_object* name_obj; json_object_object_get_ex(obj, "name", &name_obj); const char* name = json_object_get_string(name_obj); // 獲取"age"字段的值 struct json_object* age_obj; json_object_object_get_ex(obj, "age", &age_obj); int age = json_object_get_int(age_obj); // 獲取"score"字段的值 struct json_object* score_obj; json_object_object_get_ex(obj, "score", &score_obj); int score_len = json_object_array_length(score_obj); int* score = malloc(score_len * sizeof(int)); for (int i = 0; i< score_len; i++) { struct json_object* item = json_object_array_get_idx(score_obj, i); score[i] = json_object_get_int(item); } // 釋放內(nèi)存 json_object_put(obj); free(score); // 返回JSON格式的數(shù)據(jù) struct json_object* ret_obj = json_object_new_object(); json_object_object_add(ret_obj, "name", json_object_new_string(name)); json_object_object_add(ret_obj, "age", json_object_new_int(age)); struct json_object* score_arr = json_object_new_array(); for (int i = 0; i< score_len; i++) { json_object_array_add(score_arr, json_object_new_int(score[i])); } json_object_object_add(ret_obj, "score", score_arr); const char* ret_json_str = json_object_to_json_string(ret_obj); printf("%s\n", ret_json_str); return 0; }
上面的代碼中,我們首先使用json_tokener_parse函數(shù)將JSON格式的數(shù)據(jù)解析成json_object類型的數(shù)據(jù)結構。
然后,我們使用json_object_object_get_ex函數(shù)獲取指定字段的值,并將其轉(zhuǎn)化成C的基本類型。
接著,我們使用json_object_new_object、json_object_new_string、json_object_new_int等函數(shù)創(chuàng)建一個新的JSON格式的數(shù)據(jù)結構。
最后,我們使用json_object_to_json_string函數(shù)將json_object類型的數(shù)據(jù)結構轉(zhuǎn)化為JSON格式的字符串并返回。