我一直在尝试使用以下代码,从一个例子中,我不得不将json_object_object_get(struct json_object * obj,const char * key)更改为json_object_get_ex(struct json_object * obj,const char * key, struct json_object ** value)
对不起,我已经发布了类似的问题,因为我一直试图找到一种方法来解决json从套接字中解脱几天而且我变得绝望,但我已经做了一些工作和研究,我认为这很接近。我从编译下面得到的错误是:
server4.c:在函数'main'中: server4.c:62:错误:解除引用指向不完整类型的指针 server4.c:68:警告:赋值使用整数而不使用强制转换
struct json_object *jobj, *val_jobj, *value;
char const *val;
char buf[50];
fgets(buf, sizeof(buf), stdin);
printf("Input JSON : %s", buf);
char const *val;
*jobj = json_tokener_parse(buf);
if (is_error(jobj))
return (-1);
printf("Received JSON in String format : %s\n",
json_object_to_json_string(jobj));
//Get the value for the key "name"
val_jobj = json_object_object_get_ex(jobj, "name", &value);
printf("Extracted value for command : %s\n",
//Get the string from the value of the key "name"
val = json_object_get_string(val_jobj);
printf("String value returned : %s\n", val);
我看不出有什么问题,我不完全理解json-c是如何工作的,我对c ++也比较熟悉,当然我也在那里使用指针。无论哪种方式,通过一些json解析器阅读c ++,我发现它们更容易理解。
提前致谢
答案 0 :(得分:1)
json_object结构是一种不透明的类型。它是私有的,指向它的指针不能被json-c库外的代码解除引用。
json_tokener_parse返回json_object *所以第62行应为:
jobj = json_tokener_parse(buf);
也就是说,不要取消引用jobj。
答案 1 :(得分:0)
您的代码中显示的唯一解除引用是
*jobj = json_tokener_parse(buf);
所以这必须是错误消息所引用的第62行。
您告诉编译器获取指针jobj
的值(您从未为其指定值,因此存在错误编号1),并在该值所指向的空间中存储该值从json_tokener_parse(buf)
返回。麻烦的是,你没有告诉编译器struct json_object
是什么,所以jobj
是指向一个不完整类型的指针 - 编译器不知道它有多大,也不知道它是什么组件由...制成。我假设你有一个JSON头文件,你忽略了#include
。
关于第68行的警告是一个单独的但很可能相关的问题,但是这一行是68(如果我的猜测62是正确的)是一个评论。