在C語(yǔ)言中查找和替換JSON數(shù)據(jù)中的鍵值對(duì)可以通過(guò)使用第三方庫(kù)或手動(dòng)解析實(shí)現(xiàn)。使用第三方庫(kù)可以減少代碼工作量并提高效率。以下是使用第三方庫(kù)jansson來(lái)查找和替換JSON數(shù)據(jù)中鍵值對(duì)的示例代碼:
#include <jansson.h> #include <stdio.h> int main() { const char* json_str = "{\"name\": \"John\", \"age\": 30, \"city\": \"New York\"}"; json_error_t error; json_t* json_obj = json_loads(json_str, 0, &error); if (json_obj) { json_t* json_name = json_object_get(json_obj, "name"); if (json_name) { const char* name = json_string_value(json_name); printf("Name: %s\n", name); json_object_set_new(json_obj, "name", json_string("Jane")); printf("Updated JSON string: %s\n", json_dumps(json_obj, JSON_ENCODE_ANY)); } json_decref(json_obj); } else { fprintf(stderr, "Failed to parse JSON: %s\n", error.text); } return 0; }
代碼中使用json_loads函數(shù)將JSON字符串解析為json_t對(duì)象。然后使用json_object_get函數(shù)按鍵名獲取要查找的鍵值對(duì),如果找到則可以使用json_string_value獲取對(duì)應(yīng)的值。使用json_object_set_new函數(shù)可以替換鍵值對(duì)中的值,最后使用json_dumps函數(shù)將更新后的json_t對(duì)象轉(zhuǎn)換為JSON字符串。
如果需要在JSON對(duì)象的嵌套層級(jí)中查找和替換鍵值對(duì),則可以使用json_object_iter()和json_object_iter_next()函數(shù)進(jìn)行迭代操作。以下是示例代碼:
json_t* json_obj = json_loads("{\"person\":{\"name\":\"John\",\"age\":30}}", 0, &error); if (json_obj) { json_t* person_obj = json_object_get(json_obj, "person"); if (person_obj) { json_t* json_name = NULL; const char* name = NULL; void *iter = json_object_iter(person_obj); while (iter) { const char* key = json_object_iter_key(iter); if (strcmp(key, "name") == 0) { json_name = json_object_iter_value(iter); name = json_string_value(json_name); json_object_set_new(person_obj, "name", json_string("Jane")); break; } iter = json_object_iter_next(person_obj, iter); } printf("Updated JSON string: %s\n", json_dumps(json_obj, JSON_ENCODE_ANY)); } json_decref(json_obj); }
代碼中使用json_object_iter()獲取JSON對(duì)象的第一個(gè)鍵值對(duì)迭代器,然后使用json_object_iter_key()和json_object_iter_value()函數(shù)獲取當(dāng)前迭代器所指向的鍵和值。通過(guò)比較鍵名和指定的鍵名相同則使用json_object_set_new()函數(shù)替換鍵值對(duì)中的值。最后使用json_dumps()函數(shù)將更新后的json_t對(duì)象轉(zhuǎn)換為JSON字符串。