c语言创建和解析json数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 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` 

猜你喜欢

转载自blog.csdn.net/FlayHigherGT/article/details/83585348