1. 简介:

参考:

https://github.com/json-c/json-c/wiki

https://github.com/json-c/json-c

https://blog.csdn.net/u014530704/article/details/72674642?utm_source=copy

https://blog.csdn.net/w_ww_w/article/details/8295027

重点哈:https://blog.csdn.net/qimi123456/article/details/80426474

2. 编译运行:

json-c GitHub repo: https://github.com/json-c/json-c

$ git clone https://github.com/json-c/json-c.git

$ cd json-c

$ sh autogen.sh

followed by

$ ./configure # --enable-threading

$ make

$ make install

To build and run the test programs:

$ make check

$ make USE_VALGRIND=0 check # optionally skip using valgrind

3. 简单测试

1. 测试前,创建配置文件test.json,内容如下:

[root@localhost tests]# cat test.json

{"cmd":"SetPwd","params":{"id":111,"password":"test"}}

2. 编写测试文件test.c,内容如下:

#include #include #include #include #include "../json.h"

void main()

{

/*从文件中获取json对象*/

struct json_object * json_policy_array;

json_policy_array = json_object_from_file("./test.json");

printf("%s\n",json_object_to_json_string(json_policy_array));

/*从json对象中获取json对象*/

struct json_object * json_cmd ;

json_cmd = json_object_object_get(json_policy_array,"cmd");

printf("%s\n",json_object_to_json_string(json_cmd));

/*从json对象中获取json对象*/

struct json_object * json_params ;

json_params = json_object_object_get(json_policy_array,"params");

printf("%s\n",json_object_to_json_string(json_params));

int id = -1; //用于保存账号的值

int pwd_len = 0;

char *pwd = NULL; //用于保存密码的值

char *cmd = NULL; //用于保存cmd的值

/*从json对象中获取数据,首先获取对象,然后进行类型转换,转成int、float、string等*/

id = json_object_get_int(json_object_object_get(json_params,"id"));

printf("id = %d\n", id);

cmd = json_object_get_string(json_object_object_get(json_policy_array,"cmd"));

printf("cmd = %s\n", cmd);

pwd_len = json_object_get_string_len(json_object_object_get(json_params,"password"));

pwd = json_object_get_string(json_object_object_get(json_params,"password"));

printf("pwd_len = %d\n", pwd_len);

printf("pwd = %s\n", pwd);

/*向json文件中添加数据*/

//创建一个json对象newPobj

char *result = "OK";

//往json_policy_array里面添加键值对

json_object_object_add(json_policy_array,"result",json_object_new_string(result));

//创建一个json对象paramsProbj

json_object *paramsProbj = NULL;

paramsProbj = json_object_new_object();

//往paramsProbj里面添加键值对

json_object_object_add(paramsProbj,"id",json_object_new_int(200));

json_object_object_add(paramsProbj,"password",json_object_new_string("password2"));

//把paramsProbj添加到newPobj对象中

json_object_object_add(json_params,"paramsProbj",paramsProbj);

//这时还是将配置信息存在内存中呢

printf("%s\n",json_object_to_json_string(json_policy_array));

//将内存中修改后的配置文件,写会到磁盘中

json_object_to_file("./test.json",json_policy_array);

//释放内存

//引用计数方式,无需手动释放

}

3. 编译

[root@localhost tests]# gcc -ljson-c test.c

test.c: In function ‘main’:

test.c:32:6: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]

cmd = json_object_get_string(json_object_object_get(json_policy_array,"cmd"));

^

test.c:36:6: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]

pwd = json_object_get_string(json_object_object_get(json_params,"password"));

^

4.运行

[root@localhost tests]# ./a.out

{ "cmd": "SetPwd", "params": { "id": 111, "password": "test" } }

"SetPwd"

{ "id": 111, "password": "test" }

id = 111

cmd = SetPwd

pwd_len = 4

pwd = test

{ "cmd": "SetPwd", "params": { "id": 111, "password": "test", "paramsProbj": { "id": 200, "password": "password2" } }, "result": "OK" }

运行后,配置文件内容如下:

[root@localhost tests]# cat test.json

{"cmd":"SetPwd","params":{"id":111,"password":"test","paramsProbj":{"id":200,"password":"password2"}},"result":"OK"}

4. 项目应用

在项目中,可以对此开源库进行封装,以使用项目本身;

为了是运行中的进程能够在配置文件改变后重新读取,需要引入信号机制:

1. 可以直接在信号处理函数中重新读取配置文件;

2. 也可以使用单独的线程,线程阻塞等待信号量,信号处理函数中释放信号量,线程获得信号量后,读写配置文件。

c语言json配置文件linux,Linux C 编程——使用json-c库读取json格式的配置文件相关推荐

  1. python使用configparser读取ini格式的配置文件

    python使用configparser读取ini格式的配置文件 来自Python标准库的configparser模块定义了读取和写入Microsoft Windows操作系统使用的配置文件的功能.这 ...

  2. JAVA通信编程(二)——如何读取java的properties配置文件(插播)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. netcore读取json文件_【NET Core】.NET Core中读取json配置文件

    在.NET Framework框架下应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别用 Sy ...

  4. Python读取ini格式的配置文件

    Python读取配置文件 一.书写ini配置文件 ini文件,指的是后缀名以.ini结尾的文件.ini文件中数据的存放方式是以"section"和"键值对"数据 ...

  5. 使用pygal.maps.world库读取JSON格式文件,显示世界人口地图图示

    import json import pygal.maps.world #引入世界地图 from pygal_maps_world.i18n import COUNTRIES #引入世界个国家def ...

  6. netcore读取json文件_.net core读取json格式的配置文件

    在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...

  7. Andorid中使用Gson和Fast-json解析库解析JSON数据---第三方库学习笔记(二)

    JSON介绍: JSON:JavaScript对象表示法 JSON是存储和交换文本信息的语法. 特点: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更易理解 ...

  8. sex 无需下载_js读取本地json格式文件数据的几种实现方法,内有vue读取json示例代码。...

    方法一:通过getJSON实现 getJSON是jquery提供的读取json格式文件的方法 首先我们将html中引入jquery,可以通过百度CDN引入,代码如下: 然后就可以在script中使用g ...

  9. 虚幻4 读取Json文件数据

    虚幻4读取Json文件数据 1.用虚幻C++读取文件目录 TEXT(内写文件路径以及名称) FString DATA;if (FFileHelper::LoadFileToString(DATA, T ...

  10. python中json如何存放字节数组中_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)...

    本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. 本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如 ...

最新文章

  1. 解决Tomcat v8.0 Server at localhost failed to start.
  2. 课时 27:Kubernetes 安全之访问控制(匡大虎)
  3. 一篇搞定异常: Exception
  4. 使用sed修改最后一行数据
  5. jQuery 判断鼠标键
  6. oracle之单行函数之分组函数
  7. android 实现论坛界面,android界面开发之主流UI布局范例
  8. win10断网重连宽带(宽带王)强烈推荐, 关键词:自动拨号、IPV6、断网自动重连、无网络自动重连
  9. Tomcat下载安装以及配置(详细教程)
  10. Java类加载机制与反射 jvm学习
  11. python3 sorted()的用法
  12. 阿里开源互动游戏引擎Eva.js
  13. 浅谈微生物组常用了四种统计检验方法
  14. java处理器,JAVA注解处理器
  15. 多线程+socket 实现群聊服务器
  16. PowerApps教程02-了解软件运行逻辑
  17. acrobat PDF删除部分_PDF编辑器Adobe Acrobat DC 2019
  18. 计算机的电子表格英文,Excel电子表格规范的实用方法(中英文对照).pdf
  19. C++的Json解析库:jsoncpp和boost .
  20. 什么?创业者别光想着做CEO,他首先应该是一名出色的销售(一)

热门文章

  1. win10下rdlc报表在vs(visual studio)中中文显示小方块的批量处理解决方法
  2. 新申请了一个博客,这个博客主要用来记录编程学习笔记
  3. 想成功创业,你首先要有这样的思维
  4. linux内核态删除文件函数,初探Linux内核态——通过proc文件系统作快速问题定位...
  5. Java 线程死锁初理解
  6. Redis实现分布式session功能的共享
  7. fullpage.js使用指南
  8. NPM酷库050:xmlbuilder,创建XML文件
  9. ngrinder安装
  10. 使用Go语言实现简单MapReduce框架