欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c語言json格式字符串轉map

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

C語言中常常需要處理JSON格式的文本字符串,而將JSON格式字符串轉換為C語言中的map數據結構是比較常見的需求。本文將介紹如何使用C語言實現JSON格式字符串轉map。

#include <stdio.h>
#include <string.h>
#include <jansson.h>
typedef struct map_entry {
char *key;
json_t *value;
} map_entry;
typedef struct map {
map_entry *entries;
size_t size;
} map;
map *json_to_map(const char *json_str) {
map *result = NULL;
json_t *root = json_loads(json_str, 0, NULL);
if (json_is_object(root)) {
result = (map*)malloc(sizeof(map));
if (result == NULL) {
return NULL;
}
size_t map_size = json_object_size(root);
result->size = map_size;
result->entries = (map_entry*)malloc(sizeof(map_entry) * map_size);
const char *key;
json_t *value;
size_t index = 0;
json_object_foreach(root, key, value) {
char *key_copy = strdup(key);
json_t *value_copy = json_deep_copy(value);
if (key_copy == NULL || value_copy == NULL) {
return NULL;
}
result->entries[index].key = key_copy;
result->entries[index].value = value_copy;
++index;
}
}
json_decref(root);
return result;
}
int main() {
const char *json_str = "{\"name\":\"Tom\",\"age\":20}";
map *m = json_to_map(json_str);
if (m != NULL) {
for (int i = 0; i< m->size; ++i) {
printf("Key: %s, Value: %s\n", m->entries[i].key, json_dumps(m->entries[i].value, 0));
}
free(m);
}
return 0;
}

以上是一個簡單的JSON轉map的例子,我們使用了jansson庫來解析JSON字符串,然后將key-value值存儲到一個map_entry結構體中,并將所有的map_entry結構體存儲在一個map結構體中。最后輸出時遍歷map即可。需要注意的是,在實際使用中需要對內存進行管理,并進行錯誤檢查以防止內存泄漏和程序崩潰。