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中。

常用函数功能

  1. 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;
}
  1. json_object_set_int_member

  2. json_object_set_string_member

  3. json_object_set_array_member

  4. json_object_new

  5. 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的使用相关推荐

  1. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  2. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用

    我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...

  3. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  4. Python 标准库之 json

    1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...

  5. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  6. 数据库里存json数据

    需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...

  7. http传输json文件_python

    https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...

  8. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  9. dataframe 转json

    20210810 字符串转换为字典的时候,如果没有引号会报找不到 这个名称 字符串类型变字典 本身含有字典的括号 列表里面本身要是字典类型 才能通过此方法 把列表转换为dataframe # 格式检查 ...

  10. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

最新文章

  1. 终于找到一个还算满意的blog来安家了
  2. 【markdown】图片的处理
  3. 信息系统项目管理师-组织级、流程管理核心知识点思维脑图
  4. 兵团职称计算机准考证查询,兵团初级会计准考证打印入口官网
  5. 转 关于window10安装jdk,配置环境变量,javac不是内部或外部命令,也不是可运行的程序 或批处理文件的细节问题。...
  6. SQL Server 数据库中的几个常见的临界值
  7. svn提交提示服务器文件被锁,svn被锁定怎么解决-svn被锁定的解决方法 - 河东软件园...
  8. SQL存储过程与自定义函数实例
  9. DotNetTextBox V3.0 所见即所得编辑器控件Ver3.2.5 Free(免费版)
  10. php for of,JavaScript中 for、for in、for of、forEach的用法小结(附代码)
  11. Android应用内存泄露分析以及优化方案
  12. android6.0 Activity(四) Surface创建
  13. 如何做社群运营才能提高用户的活跃度?
  14. 修改android模拟器位置
  15. 靖哥哥教你如何安装chrome浏览器离线插件
  16. java jcifs ntlm_Java 使用NTLM身份验证使用soap服务
  17. 2.郝斌C语言课程大纲
  18. 修改域服务器同步时间,配置Windows Server 2008 R2 域控制器的时间同步
  19. Android 自定义下拉列表
  20. mysql远程访问的设置

热门文章

  1. 硬盘格式化后能恢复数据吗
  2. 阿里云云安全 ACP(五)云盾的数据级防护
  3. axios拦截器 @令狐张豪
  4. 华为FreeBuds 4的端午考验:在家休闲or出门闲游,有它更得意
  5. DOC和DOCX有何区别?如何使用Aspose实现快速互转?
  6. c语言中indexOf()的用法
  7. LINUX 日志操作c/c++ spdlog
  8. python turtle用法,python中turtle用法
  9. Excel 如何批量删除自定义的单元格样式
  10. 主流SpringCloud微服务架构,您可少走弯路