<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>为什么要学习解析Json文件?<br> 工作需要呗!</p>
讯享网
最近在工作项目中,有需求是需要进行解析Json字符串的,但是我只会使用QT去解析Json,且主管规定要使用C/C++语言去解析,说是为了方便移植到其他项目中进行使用…
花了一两周的悠闲时间去学习,把一些比较常用的解析的JSON字符串解析解析记录下来!
json主要用来网络数据传输!
cjosn库下载网址:https://sourceforge.net/projects/cjson/

下载后会得到一个压缩包,解压后进入里面拷贝cJSON.c和cJSON.h文件到自己的项目中去。

最后在自己的项目中把这两个文件添加进来即可!
讯享网
Linux 和 Window下都可以使用!

- 首先介绍一下json数据:

上图的json数据就是这篇博客将要操作的,将会对其进行创建、解析、修改、删除操作。
其中这里包含项目中常用的封装和解析。
- cJSON主要是通过结构体cJSON进行存储数据:
讯享网
- type类型,与下面的宏进行判断
- 字符串生成cjson指针的函数,使用后需要调用cJSON_Delete进行释放
讯享网
- cjson指针指针生成字符串的函数

使用这个两个函数一定一定一定要释放它们返回的指针内存,否则会造成内存泄漏。
…
其他的就不介绍了,都会在下面中使用到!
- { }
讯享网
代码实现上述效果:
- [ ]
讯享网
代码实现上述效果:
- [ { }, { } ]
讯享网
代码实现上述效果:
- [ [ ], [ ] ]
讯享网
代码实现上述效果:
- { { }, { } }
讯享网
代码实现上述效果:
- 定义根节点 也即是最外层 { }

讯享网
- 将上面定义的{ } 与 [ ] 都插入到跟节点{ }中
- 打印控制台查看
讯享网
记得使用cJSON_Print 和 cJSON_PrintUnformatted返回来的字符指针需要free掉内存!

- 写入文件中
- 释放掉cJSON指针
- 把代码写好后,编译运行,会在自己的项目路径中创建一个JSON文件,并写入内容,文件内容如下:

解析时需要使用结构体中的type类型进行判断,这是为了安全性考虑!
解析时也可以使用cJSON_Print函数去获取字符串或者使用结构体中的valuestring进行获取,但是要注意的是,使用cJSON_Print函数去获取字符串需要free掉获取到的指针,否则会造成内存泄漏!
下面解析会提供两种方式进行解析,第一种是固定的,写死的方式;第二种是灵活的的方式解析!
- 打开文件读取josn数据
讯享网
- 使用读取到的json数据初始化cJSON指针
- 定义一些下面需要使用到的变量
讯享网
- 直接通过键进行解析的
- 解析对象 { }
也就是解析下图内容:
解析代码:
讯享网





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/164878.html