【发布时间】:2022-01-21 10:36:00
【问题描述】:
您好,我以前从未使用过 json-c,我正在尝试解析这个 json 文件:
{
"result": {
"schedules": [
{
"message": "2 mn",
"destination": "La Defense (Grande Arche)"
},
{
"message": "6 mn",
"destination": "La Defense (Grande Arche)"
},
{
"message": "11 mn",
"destination": "La Defense (Grande Arche)"
},
{
"message": "15 mn",
"destination": "La Defense (Grande Arche)"
}
]
},
"_metadata": {
"call": "GET /schedules/metros/1/berault/A",
"date": "2021-12-19T12:36:19+01:00",
"version": 4
}}
我试图将“消息”键的内容放入 4 个不同的变量中,并将它们打印为这样的字符串:
消息 = 2 分钟
message2 = 6 分钟
message3 = 11 分钟
message4 = 15 分钟
这是我的代码:
#include <json-c/json.h>
#include <stdio.h>
int main(int argc, char **argv) {
FILE *fp;
char buffer[1024];
struct json_object *parsed_json;
struct json_object *message;
struct json_object *message2;
struct json_object *message3;
struct json_object *message4;
fp = fopen("test.json","r");
fread(buffer, 2048, 1, fp);
fclose(fp);
parsed_json = json_tokener_parse(buffer);
json_object_object_get_ex(parsed_json, "message", &message);
json_object_object_get_ex(parsed_json, "message", &message2);
json_object_object_get_ex(parsed_json, "message", &message3);
json_object_object_get_ex(parsed_json, "message", &message4);
printf("Message: %s\n", json_object_get_string(message));
printf("Message: %s\n", json_object_get_string(message2));
printf("Message: %s\n", json_object_get_string(message3));
printf("Message: %s\n", json_object_get_string(message4));
}
但由于我的 json 与教程中的结构不同,因此它不起作用并返回给我:
Message: (null)
Message: (null)
Message: (null)
Message: (null)
Process finished with exit code 0
非常感谢任何建议!
【问题讨论】:
-
char buffer[1024];和fread(buffer, 2048, 1, fp);- 你看到问题了吗?让size_t bytes_read = fread(buffer, 1, sizeof buffer - 1, fp); if(bytes_read>0) buffer[bytes_read ] = '\0'; -
不同的 JSON 结构,不同的键和值在代码中获取。您不能复制粘贴代码来处理不同的 JSON 输入。
-
LilDev:答案有帮助吗?如果您想让我澄清任何事情,请尽管问。