• 注册
当前位置:代码四四五 > 默认分类 >正文

c json 转 listmap

在C语言中,我们经常会遇到将JSON数据转化为ListMap的场景。ListMap的实现是通过将JSON数据转化为一个动态数组,而数组中的每个元素又是一个Map类型的键值对。

// 定义Map结构体
struct Map {
char *key;      // map的键
void *value;    // map的值
};
// 定义ListMap结构体
struct ListMap {
struct Map *map;    // 存储Map类型数据的数组
int size;           // 数组长度
};

我们可以使用 cJSON 这个开源库来解析JSON数据。cJSON支持将JSON数据转化为数组、Map、字符串、数字等基本类型。

#include "cJSON.h"
// 将JSON数据转化为一个ListMap类型的结构体
struct ListMap *jsonToListMap(char *json) {
struct ListMap *listMap = malloc(sizeof(struct ListMap));
cJSON *root = cJSON_Parse(json);
if (!root) {
printf("Invalid JSON data.\n");
return NULL;
}
// 获取JSON数据中的数组
cJSON *arrayJson = cJSON_GetObjectItem(root, "list");
if (arrayJson == NULL || cJSON_IsArray(arrayJson) == false) {
printf("Invalid JSON data.\n");
return NULL;
}
// 计算数组长度
int arraySize = cJSON_GetArraySize(arrayJson);
// 遍历数组,将每个元素转化为一个Map类型的键值对
struct Map *mapArray = malloc(sizeof(struct Map) * arraySize);
for (int i = 0; i< arraysize;="" i++)="" {="" cjson="" *itemjson="cJSON_GetArrayItem(arrayJson," i);="" 解析map中的键="" cjson="" *keyjson="cJSON_GetObjectItem(itemJson," "key");="" char="" *key="keyJson" keyjson-="">valuestring : "";
mapArray[i].key = key;
// 解析Map中的值
cJSON *valueJson = cJSON_GetObjectItem(itemJson, "value");
void *value = NULL;
if (valueJson == NULL || cJSON_IsNumber(valueJson) == false) {
value = valueJson->valuestring; // Map的值为字符串类型
} else {
value = malloc(sizeof(int)); // Map的值为数字类型
*((int *) value) = valueJson->valueint;
}
mapArray[i].value = value;
}
listMap->map = mapArray;
listMap->size = arraySize;
cJSON_Delete(root);
return listMap;
}

在实际的开发中,我们需要注意内存泄漏的问题。当不使用动态分配内存的变量时,一定要记得及时释放内存。

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 162202241@qq.com

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐