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即可。需要注意的是,在實際使用中需要對內存進行管理,并進行錯誤檢查以防止內存泄漏和程序崩潰。
上一篇vue 網站自適應