版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FlayHigherGT/article/details/83585348
之前一篇有说到使用lincurl库获取网页数据,那么问题来了,当我们获取到的数据大多是json的格式,应该怎么解析出我们需要的字段呢?下面我们使用json-glib库来对json数据进行创建和解析。
#include<json-glib/json-glib.h>
#include<stdio.h>
#include<string.h>
int main()
{
//生成json
g_type_init();
JsonObject *obj = json_object_new();
json_object_set_string_member(obj, "name", "john");
json_object_set_int_member(obj, "age", 18);
JsonArray *arr = json_array_new();
json_array_add_string_element(arr, "lily");//{"name":"john","age":18,"friends":["lily","mark"]}
json_array_add_string_element(arr, "mark");
json_object_set_array_member(obj, "friends", arr);
JsonGenerator *g = json_generator_new();
JsonNode *root = json_node_new(JSON_NODE_OBJECT);
json_node_set_object(root, obj);
json_generator_set_root(g, root);
json_generator_to_file(g, "ex.json", NULL);
//解析!!!
JsonParser *parser = json_parser_new();
JsonNode *node = json_node_new(JSON_NODE_OBJECT);
json_parser_load_from_file(parser, "ex.json", NULL);
node = json_parser_get_root(parser);
JsonObject *obj2 = json_object_new();
obj2 = json_node_get_object(node);
const char *aaa = json_object_get_string_member(obj2, "name");
const int aa = json_object_get_int_member(obj2, "age");
printf("%s\n", aaa);
printf("%d\n", aa);
JsonArray *array = json_array_new();
array = json_object_get_array_member(obj2, "friends");
const char *bbb = json_array_get_string_element(array, 0);
const char *bb = json_array_get_string_element(array, 1);
printf("%s\n", bbb);
printf("%s\n", bb);
return 0;
}
找库:
首先安装json-glib库和pkg-config,dnf install json-glib-devel (ubuntu 下使用apt安装)
安装完以后使用pkg-config查询json-glib所需要的头文件和库文件路径pkg-config --cflags --libs json-glib-1.0,这个命令会去寻找库的.pc文件一般存在/usr/lib/pkgconfig目录下有很多.pc文件记录库的版本头文件以及库文件路径的。
pkg-config --cflags --libs json-glib-1.0
-I/usr/include/json-glib-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -ljson-glib-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
编译:
gcc test.c `pkg-config --cflags --libs json-glib-1.0`