Json-glib的使用
json-glib概述
官方网址:https://wiki.gnome.org/Projects/JsonGlib
代码地址:https://gitlab.gnome.org/GNOME/json-glib/-/tree/master/
可以下载下来看一些函数的定义和数据结构。
C下json操作的库有很多。这里介绍下json-glib。
Json-glib:c下序列化的一个库。基于glib,可以解析并生成json文件。
下载:
包含头文件:#include <json-glib/json-glib.h>
编译时加:pkg-config --cflags --libs json-glib-1.0
其中主要提供三种基本类型:JsonNode、 JsonArray 、JsonObject
JsonObject 就是Json中的对象。包含一个或多个健值对。比如{“name”:”john”, “age”:13}
也可以{“name”:”john”, “age”:23, “frieds”:[{“name”:”lili”},{“name”:”mark”}], 像这样包含数组。JsonArray为数组:可以直接包含基本类型如整形,字符串,也可像上面”friends”那样包含几个object
JsonNode: 可以包含认可基本类型,或者是数组,或者对象。一般用在生成Json数据流的时候需要指定一个根结点。此时可把它们装在jsonnode中。
常用函数功能
- json_object_new
作用:创建一个新的json目标
函数定义
/*** json_object_new: (constructor)* * Creates a new object.** Returns: (transfer full): the newly created object*/
JsonObject *
json_object_new (void)
{JsonObject *object;object = g_slice_new0 (JsonObject);object->age = 0;object->ref_count = 1;object->members = g_hash_table_new_full (g_str_hash, g_str_equal,g_free,(GDestroyNotify) json_node_unref);g_queue_init (&object->members_ordered);return object;
}
json_object_set_int_member
json_object_set_string_member
json_object_set_array_member
json_object_new
json_object_new
创建json信息
generate.c
//generate//编译命令:gcc -o generate generate.c `pkg-config --cflags --libs json-glib-1.0`#include <json-glib/json-glib.h>int main(int argc, char* argv[])
{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");json_array_add_string_element(arr, "mark");json_object_set_array_member(obj, "friends", arr);//generateJsonGenerator *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);return 0;
}
解析json信息
prase.c
//prase
//编译命令:gcc -o prase prase.c `pkg-config --cflags --libs json-glib-1.0`
#include <json-glib/json-glib.h>int main(int argc, char* argv[])
{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;
}
另外一个例子
test3.c
#include <stdlib.h>
#include <stdio.h>
#include <glib-object.h>
#include <json-glib/json-glib.h>
//编译命令:gcc -o test3 test3.c `pkg-config --cflags --libs json-glib-1.0`
int main(void)
{JsonBuilder *builder = json_builder_new();json_builder_begin_object(builder);json_builder_set_member_name(builder, "array");json_builder_begin_array(builder);json_builder_begin_object(builder);json_builder_set_member_name(builder, "name");json_builder_add_string_value(builder, "charles");json_builder_set_member_name(builder, "age");json_builder_add_int_value(builder, 20);json_builder_end_object(builder);json_builder_begin_object(builder);json_builder_set_member_name(builder, "name");json_builder_add_string_value(builder, "May");json_builder_set_member_name(builder, "age");json_builder_add_int_value(builder, 21);json_builder_end_object(builder);json_builder_end_array(builder);json_builder_end_object(builder);JsonNode *node = json_builder_get_root(builder);g_object_unref( builder);JsonGenerator *generator = json_generator_new();json_generator_set_root(generator, node);gchar *data = json_generator_to_data(generator, NULL);printf("%s\n", data);json_node_free(node);g_object_unref(generator);free(data);return 0;
}
Json-glib的使用相关推荐
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用
我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...
- VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、
1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...
- Python 标准库之 json
1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...
- python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)
前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...
- 数据库里存json数据
需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...
- http传输json文件_python
https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...
- python:Json模块dumps、loads、dump、load介绍
20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...
- dataframe 转json
20210810 字符串转换为字典的时候,如果没有引号会报找不到 这个名称 字符串类型变字典 本身含有字典的括号 列表里面本身要是字典类型 才能通过此方法 把列表转换为dataframe # 格式检查 ...
- Json文件解析(下
Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...
最新文章
- 终于找到一个还算满意的blog来安家了
- 【markdown】图片的处理
- 信息系统项目管理师-组织级、流程管理核心知识点思维脑图
- 兵团职称计算机准考证查询,兵团初级会计准考证打印入口官网
- 转 关于window10安装jdk,配置环境变量,javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题。...
- SQL Server 数据库中的几个常见的临界值
- svn提交提示服务器文件被锁,svn被锁定怎么解决-svn被锁定的解决方法 - 河东软件园...
- SQL存储过程与自定义函数实例
- DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.5 Free(免费版)
- php for of,JavaScript中 for、for in、for of、forEach的用法小结(附代码)
- Android应用内存泄露分析以及优化方案
- android6.0 Activity(四) Surface创建
- 如何做社群运营才能提高用户的活跃度?
- 修改android模拟器位置
- 靖哥哥教你如何安装chrome浏览器离线插件
- java jcifs ntlm_Java 使用NTLM身份验证使用soap服务
- 2.郝斌C语言课程大纲
- 修改域服务器同步时间,配置Windows Server 2008 R2 域控制器的时间同步
- Android 自定义下拉列表
- mysql远程访问的设置