c语言创建和解析json数据

本文介绍如何使用json-glib库在C语言中创建和解析JSON数据,包括生成JSON对象和数组,以及从文件中加载和读取JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一篇有说到使用libcurl库获取网页数据,那么问题来了,当我们获取到的数据大多是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` 

 看到最后,欢迎大家一起学习其他c/c++技术:

mytest-projects: 收集一些c/c++的技术点 (gitee.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值