C++JSON解析器

来源:互联网 发布:利文斯顿受伤前的数据 编辑:程序博客网 时间:2024/05/21 17:53

2012年,在公司项目刚接触到要使用JSON时,几个前端项目都是用MFC开发的,没找到合适的JSON解析库。

索性自己开发一个简洁实用移植性强的json解析工具,主要达到以下目标:

1. 能够解析JSON字符串

2. 能够生成JSON字符串

3. 在项目中不是一个纯粹的JSON工具,可作为数据结构来使用

4. 内存自动释放

5. 路径表达式获取或设置 json结构中的某个字段

6. 能便捷的增加json字段


工具只包含两个文件:

gxx_base.h, gxx_base.cpp

点击下载源代码
如代码中问题和bug,欢迎指正。


请大家见谅使用gxx(我姓名的缩写)作为文件的前缀,这样做的原因是:个人原创工具类,也是为了和工程中其他文件做区分避免混淆。

为什么名字为gxx_base而不是gxx_json呢?
笔者曾经问过自己同样的问题,答案是:它不是纯粹的json解析器,它是一个很实用的数据结构容器。

实际上,从2012年至今, 在公司很多项目中笔者都使用到gxx_base里提供的工具, 经过5年的维护修改,现在已经很稳定了,想在分享给有需要的猿同胞。

下面开始进入正题:


引入到工程中,会报如下错误:

error C3861: “GXX_TRACE”: 即使使用参数相关的查找,也未找到标识符

解决方法:   打开 gxx_base.h, 然后重新定义自己的 GXX_PRINT宏, GXX_PRINT宏用来输出日志信息的, 请实现自定义的日志信息输出


如何解析 JSON字符串

示例1:解析下面这串 json,读取abc数组,读取key1对应的值

{"abc":[1,2,3,{"key1":456,"key2":[4,5,6]}]}


示例2:解析下面的json串,读取学号为 002学生的信息。

{
    "schoolName": "清华大学",
    "students": [
        {
            "id": "001",
            "name": "张三",
            "age": "20"
        },
        {
            "id": "002",
            "name": "李四",
            "age": "23"
        },
        {
            "id": "003",
            "name": "王五",
            "age": "22"
        }
    ]
}





0 0