示例
使用 liuzianglib 解析 JSON 格式非常简单,以下是一个 JSON 格式的字符串,我将向你演示如何获取其中的值。
{
  "name":"liuziangexit",
  "age":16,
  "liveIn":{
                "province":"GuangDong",
                "city":"GuangZhou"
                }
}
C++ 代码:
#include "iostream"
#include "string"
#include "DC_json.h"//包含这个 liuzianglib 头文件
int main() {
    int age;
    std::string name, province, city;
    std::string str = getJson();//假设 str 中获得了我们之前说的那个 JSON 字符串
    DC::json::object js(str);//定义一个 DC::json::object 变量 js,并将 str 放入 js 构造函数
    name = js.at("name").to_value().to_string();//获取 name
    age = js.at("age").to_number().as_int32();//获取 age
    DC::json::object liveIn(js.at("liveIn").to_object());//定义一个 DC::json::object 变量 liveIn,并将 JSON 字符串中的 "liveIn" 对象放入 liveIn 构造函数
    province = liveIn.at("province").as_value().to_string();//获取 province
    city = liveIn.at("city").to_value().to_string();//获取 city
    std::cout << "姓名:" << name << "\n年龄:" << age << "\n所在省份:" << province << "\n所在城市:" << city;//输出结果
}
运行结果:
姓名:liuziangexit
年龄:16
所在省份:GuangDong
所在城市:GuangZhou
以上就是使用 liuzianglib 解析 JSON 格式字符串的一个简单例子。
总览
json 命名空间内共有五个类。
类名 | 处理的 JSON 数据结构 | 备注 |
---|---|---|
transparent | 所有 | 仅储存 JSON 格式字符串,不能对其进行操作。 |
object | JSON 对象 | 对 JSON 对象进行解析。 |
array | JSON 数组 | 对 JSON 数组进行解析。 |
value | JSON 字符串 , JSON 布尔 | 对 JSON 字符串和布尔进行解析。 |
number | JSON 数字 | 对 JSON 数字进行解析。 |
成员函数命名规则
以 as_XXX 形式命名的函数是拷贝传值,执行后不会影响该对象;以 to_XXX 形式命名的函数是移动传值,执行后该对象内容将被移走;
头文件与命名空间
liuzianglib JSON 的所有内容在头文件 DC_json.h 的 namespace DC::json 中。
其它
json 命名空间中的类提供标准异常安全保证,即抛出异常时,内部不会出现未定义行为。
liuzianglib DC::json 在 VS 2017 release 模式(O2 级别优化)下生成的二进制文件运行速度是 debug 模式下生成的二进制文件的数十倍。如果你解析一个非常大的 JSON 格式字符串时发现速度不理想,请先检查是否选择了 release 模式并打开了所有优化。
API 文档
json::transparentjson::object
json::array
json::value
json::number