Skip to content

Value operation (zh)

haibo2.liu edited this page Sep 29, 2022 · 2 revisions

value 对象操作说明

以下示例均以 JSON 为例。

取值

  • 判断 JSON 对象的值类型
// 判断 JSON 值类型
j.type();
j.is_null();
j.is_bool();
j.is_integer();
j.is_floating();
j.is_number(); // is_integer() || is_floating()
j.is_string();
j.is_array();
j.is_object();
  • JSON 对象的取值与类型转换

通过 get 函数可以直接取值:

auto b = j.get<bool>();         // 仅当 j.is_bool() 时可用
auto i = j.get<int>();          // 仅当 j.is_integer() 时可用
auto i = j.get<int64_t>();      // 仅当 j.is_integer() 时可用
auto f = j.get<float>();        // 仅当 j.is_floating() 时可用
auto d = j.get<double>();       // 仅当 j.is_floating() 时可用
auto s = j.get<std::string>();  // 仅当 j.is_string() 时可用

// 对于实现了 value_binder 的自定义数据类型,也可以直接取值
// 详情请参考下方 `与自定义类型转换`
class MyObject;
auto myObj = j.get<MyObject>();

注意:get函数会强校验数据类型(例如整形和浮点数不能自动转换),参数类型与值类型不同时会引发 configor_type_error 异常。

同时 get 支持取出引用和指针类型:

j.get<const std::string&>();
j.get<std::string&>();
j.get<const std::string*>();
j.get<std::string*>();

通过有参数的 get 函数,可以传入对象引用来取值:

int n = 0;
if (j.get(n))
{
    // 成功读取到 n 的值
}
else
{
    // 读取 n 值失败
}

类型转换:

// 显式转换
bool b = (bool)j["boolean"];
int i = (int)j["number"];
float d = (float)j["float"];

// 对于实现了 value_binder 的自定义数据类型,也可以直接转换
// 详情请参考下方 `与自定义类型转换`
class MyObject;
MyObject myObj = (MyObject)j;
MyObject myObj = j;

常用方法和运算符

  • size & empty & clear & count & ...
json::value arr = json::array{ 1, 2, 3 };
arr.size();    // 3
arr.empty();   // false
arr.erase(0);  // 第一个元素被删除
arr.clear();

json::value obj = json::object{ { "one", 1 }, { "two", 2 } };
obj.size();            // 2
obj.empty();           // false
obj.count("one");      // 1
obj.count("missing");  // 0
obj.erase("one");      // one 被删除
obj.clear();
  • 比较运算符
j["boolean"] == true
j["number"] == 1
j["number"] != 2
j["number"] > 0
j["float"] < 3
  • JSON 对象类型和数组类型的遍历
// 增强 for 循环
for (auto& j : obj) {
    std::cout << j << std::endl;
}
// 使用迭代器遍历
for (auto iter = obj.begin(); iter != obj.end(); iter++) {
    std::cout << iter.key() << ":" << iter.value() << std::endl;
}

Overview

  • Quick start ( en | zh )
  • Examples ( en | zh )

Features

  • Value operation ( en | zh )
  • Serialization ( en | zh )
  • Custom conversion ( en | zh )
  • Encoding support ( en | zh )

Other

  • Q&A ( en | zh )
  • Advanced ( en | zh )

Clone this wiki locally