色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

C語言json轉map

錢諍諍1年前7瀏覽0評論

在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并輸出。最后釋放內存。