可以采用jansson库吗
时间: 2024-03-20 19:42:57 浏览: 50
是的,你可以使用jansson库来解析JSON并进行键名的遍历和排序。以下是一个使用jansson库的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jansson.h>
void traverse(json_t *root, const char *prefix) {
if (json_is_object(root)) {
const char *key;
json_t *value;
json_object_foreach(root, key, value) {
char new_prefix[100];
if (strlen(prefix) == 0) {
sprintf(new_prefix, "%s", key);
} else {
if (json_is_array(value)) {
sprintf(new_prefix, "%s[%d].%s", prefix, json_array_size(value) - 1, key);
} else {
sprintf(new_prefix, "%s.%s", prefix, key);
}
}
traverse(value, new_prefix);
}
} else if (json_is_array(root)) {
size_t i;
json_t *value;
json_array_foreach(root, i, value) {
char new_prefix[100];
sprintf(new_prefix, "%s[%d]", prefix, i);
traverse(value, new_prefix);
}
} else {
const char *value = json_string_value(root);
printf("%s=%s\n", prefix, value);
}
}
int main() {
char *json_str = "{\"name\":\"John\",\"age\":30,\"cars\":[{\"model\":\"X1\",\"year\":2020},{\"model\":\"X3\",\"year\":2021}]}";
json_error_t error;
json_t *root = json_loads(json_str, 0, &error);
traverse(root, "");
json_decref(root);
return 0;
}
```
该代码会输出以下内容:
```
age=30
cars[0].model=X1
cars[0].year=2020
cars[1].model=X3
cars[1].year=2021
name=John
```
你可以根据需求修改输出方式,例如将每个键值对拼接成一个字符串。此外,jansson库还提供了丰富的JSON操作函数和错误处理机制,你可以根据需要进行使用。
阅读全文