如何在json_tokener_parse()之后获取json值?

MOH*_*MED 2 c json libjson

我有以下代码

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>

#include <json/json.h>

int main(int argc, char **argv)
{
      json_object *new_obj;
      char buf[] = "{ \"foo\": \"bar\", \"foo2\": \"bar2\", \"foo3\": \"bar3\" }"
      new_obj = json_tokener_parse(buf);
      printf("The value of foo is %s" /*What I have to put here?*/);
      printf("The value of foo2 is %s" /*What I have to put here?*/);
      printf("The value of foo3 is %s" /*What I have to put here?*/);
      json_object_put(new_obj);
}
Run Code Online (Sandbox Code Playgroud)

我知道我们必须用来json_tokener_parse()解析json字符串,但后来我不知道如何从json_object中提取值,new_obj如上面代码中的注释所示

如何获得json值 json_tokener_parse()

net*_*der 7

首先,您需要获取json_object特定节点:

json_object *obj_foo = json_object_object_get(new_obj, "foo");
Run Code Online (Sandbox Code Playgroud)

...然后您可以使用适当的getter来获取特定类型的节点的值:

char *foo_val = json_object_get_string(obj_foo2);
Run Code Online (Sandbox Code Playgroud)

所以,总之,你可以这样做:

printf("The value of foo is %s", 
    json_object_get_string(json_object_object_get(new_obj, "foo"))
);
Run Code Online (Sandbox Code Playgroud)

显然,最好在多个步骤中执行它,以便您可以检查错误(在这种情况下:空指针)并防止未定义的行为等.

您可以在此处找到JSON C API文档.