我是新来的,尝试实现一个 Json Parser。我找到了Json 解析器程序的教程( https://linuxprograms.wordpress.com/2010/05/20/json-c-libjson-tutorial/ )。
所以我有一个像这样的 Json 文件输入:
{ "DefaultTest": "SS",
"Send": {
"ip_hl": 4,
"ip_v": 4,
....
}
}
我使用教程中的代码(https://linuxprograms.wordpress.com/2010/08/19/json_parser_json-c/)并尝试理解这一点。但我得到一个错误,即 Method json_object_object_get_get(jobj, key) is not declared
。
因此,找到一个 Wibesite ( https://json-c.github.io/json-c/json-c-0.10/doc/html/deprecated.html ),其中包含 json-lib 的弃用列表。在这有我应该使用的住宿json_object_object_get_ex
。
如果我使用该方法,我会收到此警告:assignment makes pointer from integer without a cast [-Wint-conversion] jobj = json_object_object_get_ex(jobj, key, NULL);
这是什么意思?我该如何解决?我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <json/json.h>
void json_parse(json_object * jobj) {
enum json_type type;
json_object_object_foreach(jobj, key, val)
{
printf("type: %d\n", type);
type = json_object_get_type(val);
switch (type) {
case json_type_boolean:
case json_type_double:
case json_type_int:
case json_type_string:
// print_json_value(val);
break;
case json_type_object:
printf("json_type_objectn");
// jobj = json_object_object_get(jobj, key);
jobj = json_object_object_get_ex(jobj, key, NULL);
json_parse(jobj);
break;
case json_type_array:
// printf("json_type_arrayn");
// json_parse_array(jobj,key);
break;
}
}
}
int main() {
char *path = "../Paketspezifikationen/Default-File/DefaultConfig2.json";
FILE *fp;
char *data = NULL;
if ((fp = fopen(path, "rb")) == NULL) {
} else if (fseek(fp, 0, SEEK_END) != 0) {
fclose(fp);
} else {
long size = ftell(fp);
if (size > 0 && (data = (char *) malloc(size + 1)) != NULL) {
fseek(fp, 0, SEEK_SET);
if (fread(data, 1, size, fp) != (size_t) size) {
free(data);
data = NULL;
} else {
data[size] = '\0';
}
}
fclose(fp);
}
printf("JSON string: %sn", data); // return data
json_object * jobj = json_tokener_parse(data);
json_parse(jobj);
}
在 Main 中,我首先读取 Json 文件并将其存储在 String 中,并尝试从那里获取我的所有键和值。所以我使用json解析器。
希望你能帮助我。