C JSON 是一種常用的數(shù)據(jù)傳輸格式,在很多應(yīng)用場(chǎng)景中都有廣泛的應(yīng)用。與此同時(shí),字典(Dictionary)也是一種常用的數(shù)據(jù)結(jié)構(gòu),在我們進(jìn)行編程時(shí)也經(jīng)常會(huì)涉及到字典的操作。那么,如何將 C JSON 中的數(shù)據(jù)存入字典呢?下面我們來(lái)看一下具體實(shí)現(xiàn)方法。
#include <stdio.h> #include <stdlib.h> #include "cJSON.h" #include "uthash.h" // 定義一個(gè)結(jié)構(gòu)體,用于存儲(chǔ)字典中的數(shù)據(jù) struct dict_data { char key[64]; cJSON *value; UT_hash_handle hh; }; int main() { // 解析 C JSON 字符串 char *json_str = "{\"username\":\"Tom\", \"age\":18}"; cJSON *root = cJSON_Parse(json_str); // 將解析出來(lái)的數(shù)據(jù)存入字典 struct dict_data *dict = NULL; cJSON *child = NULL; cJSON_ArrayForEach(child, root) { struct dict_data *data = malloc(sizeof(struct dict_data)); sprintf(data->key, "%s", child->string); data->value = child; HASH_ADD_STR(dict, key, data); } // 根據(jù)鍵名,獲取字典中的數(shù)據(jù) struct dict_data *data; char *key = "age"; HASH_FIND_STR(dict, key, data); if (data) { printf("%s: %d\n", key, cJSON_GetNumberValue(data->value)); } }
在上面的代碼中,我們首先需要解析 C JSON 字符串,得到一個(gè) cJSON 對(duì)象。然后,我們定義了一個(gè)結(jié)構(gòu)體 dict_data,用于存儲(chǔ)字典中的數(shù)據(jù)。在將 C JSON 中的數(shù)據(jù)存入字典時(shí),我們使用 cJSON_ArrayForEach 宏,遍歷 cJSON 對(duì)象的每一個(gè)子元素。然后,我們將每一個(gè)子元素存入一個(gè) dict_data 結(jié)構(gòu)體中,并使用哈希表技術(shù)將該結(jié)構(gòu)體存入字典中。
最后,我們可以根據(jù)鍵名,在字典中獲取對(duì)應(yīng)的數(shù)據(jù)。在上面的例子中,我們根據(jù)鍵名 age,從字典中獲取相應(yīng)的數(shù)據(jù),并打印出來(lái)。