#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; } 在上面的代码基础上,将打印出来的字符串拼接成一个字符串
时间: 2024-03-20 14:44:30 浏览: 124
可以在代码中添加一个全局变量,用于存储拼接后的字符串。然后在遍历 JSON 对象时,将每个键值对以字符串形式拼接起来,存储到全局变量中。最后在程序结束时,输出拼接后的字符串即可。以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jansson.h>
char result_str[1000] = ""; // 声明全局变量用于存储拼接后的字符串
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);
char str[100];
sprintf(str, "%s=%s\n", prefix, value);
strcat(result_str, str); // 将拼接后的字符串存储到全局变量中
}
}
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);
printf("%s", result_str); // 输出拼接后的字符串
return 0;
}
```
运行程序后会输出以下结果:
```
name=John
age=30
cars[0].model=X1
cars[0].year=2020
cars[1].model=X3
cars[1].year=2021
```
全局变量 `result_str` 中存储的就是拼接后的字符串。
阅读全文