用c语言写一个提取json,KEY-VALUE提取数据的函数
时间: 2024-03-26 16:38:16 浏览: 134
json-c解析数组demo
4星 · 用户满意度95%
好的,下面是一个简单的使用C语言提取JSON的函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_JSON_LEN 1024
/* JSON 数据结构 */
typedef struct {
char key[32];
char value[64];
} JsonKeyValue;
/* 提取 json 中 key 对应的 value */
char *get_json_value(char *json_str, char *key) {
static char value[64];
JsonKeyValue json_kv[10];
char *token, *saveptr1, *saveptr2;
int i = 0;
/* 拆分 json_str,提取 key-value 对 */
token = strtok_r(json_str, ",", &saveptr1);
while (token != NULL && i < 10) {
char *key_ptr = strstr(token, key);
if (key_ptr != NULL) {
/* 找到 key,提取对应的 value */
char *value_ptr = strstr(token, ":");
if (value_ptr != NULL) {
strcpy(json_kv[i].key, key);
strcpy(json_kv[i].value, value_ptr + 1);
i++;
}
}
token = strtok_r(NULL, ",", &saveptr1);
}
/* 查找 key 对应的 value */
for (int j = 0; j < i; j++) {
if (strcmp(json_kv[j].key, key) == 0) {
/* 找到 key 对应的 value */
strcpy(value, json_kv[j].value);
/* 去掉前后的空格和引号 */
char *trim_value = value + strspn(value, " \t\"");
trim_value[strcspn(trim_value, "\"")] = '\0';
return trim_value;
}
}
/* 没有找到 key 对应的 value */
return NULL;
}
int main(int argc, char *argv[]) {
/* 测试数据 */
char json_str[MAX_JSON_LEN] = "{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\"}";
char *name = "name";
char *age = "age";
char *city = "city";
/* 提取 key 对应的 value */
char *name_value = get_json_value(json_str, name);
char *age_value = get_json_value(json_str, age);
char *city_value = get_json_value(json_str, city);
/* 输出结果 */
printf("%s: %s\n", name, name_value);
printf("%s: %s\n", age, age_value);
printf("%s: %s\n", city, city_value);
return 0;
}
```
这个函数可以从 JSON 字符串中提取指定 key 对应的 value。您可以将需要提取的 JSON 字符串和 key 作为函数的参数,函数返回值为 char* 类型的 value。需要注意的是,这个函数目前只支持提取简单的 key-value 对,对于多层嵌套的 JSON 数据可能不适用。
阅读全文