在C語言中,JSON(JavaScript Object Notation)是一種流行的數據交換格式。在處理JSON時,通常需要將其轉換為數據結構,如map。下面是使用C語言將JSON轉換為map的示例:
#include <stdio.h> #include <jansson.h> #include <glib.h> // 將json元素轉換為map的函數 void json_to_map(json_t *json, GHashTable *map) { // 如果json元素是一個對象 if (json_is_object(json)) { const char *key; json_t *value; json_object_foreach(json, key, value) { // 遞歸處理每個鍵值對 json_to_map(value, map); } } // 如果json元素是一個數組 else if (json_is_array(json)) { int i, size; json_t *value; size = json_array_size(json); for (i = 0; i < size; i++) { value = json_array_get(json, i); // 遞歸處理每個元素 json_to_map(value, map); } } // 否則將json元素轉換為字符串并保存在map中 else { const char *str = json_string_value(json); g_hash_table_insert(map, g_strdup(str), g_strdup(str)); } } int main() { // 示例JSON字符串 const char *json_str = "{\"name\":\"Tom\",\"age\":18,\"hobbies\":[\"reading\",\"swimming\"]}"; // 解析JSON字符串 json_error_t error; json_t *json = json_loads(json_str, 0, &error); if (!json) { printf("Error: %s\n", error.text); return 1; } // 將JSON轉換為map GHashTable *map = g_hash_table_new(g_str_hash, g_str_equal); json_to_map(json, map); // 遍歷map并輸出 GHashTableIter iter; gpointer key, value; g_hash_table_iter_init(&iter, map); while (g_hash_table_iter_next(&iter, &key, &value)) { printf("%s: %s\n", (char*)key, (char*)value); } // 釋放內存 g_hash_table_destroy(map); json_decref(json); return 0; }
在上面的示例中,首先定義了一個json_to_map()函數,它接受一個json_t類型的指針和一個GHashTable類型的指針作為參數,將json元素遞歸轉換為map并保存到GHashTable中。如果json元素是一個對象,將遞歸處理每個鍵值對;如果json元素是一個數組,將遞歸處理每個元素;否則將json元素轉換為字符串并保存在map中。
在main()函數中,定義了一個示例JSON字符串,并使用json_loads()函數將其解析為一個json_t類型的指針。然后調用json_to_map()函數將JSON轉換為map,并使用GHashTableIter對象遍歷map并輸出。最后釋放內存。
上一篇vue 獲取下拉