示例

使用 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::transparent
json::object
json::array
json::value
json::number