rapidjson笔记

文件对象模型(Document Object Model, DOM)。可以解析一个 JSON 至 DOM,然后就可以轻松查询及修改 DOM,并最终转换回 JSON。

把rapidjson文件夹拷贝到工程里就可以了

其中有需要的头文件

每个 JSON 值都储存为 Value 类,而 Document 类则表示整个 DOM,它存储了一个 DOM 树的根 Value。RapidJSON 的所有公开类型及函数都在 rapidjson 命名空间中。

 

// 使用引用来连续访问,方便之余还更高效。

const Value& a = document["a"];

assert(a.IsArray());

for (SizeType i = 0; i < a.Size(); i++) // 使用 SizeType 而不是 size_t

printf("a[%d] = %d\n", i, a[i].GetInt());

查询 Array

缺省情况下,SizeType 是 unsigned 的 typedef。在多数系统中,Array 最多能存储 2^32-1 个元素。

你可以用整数字面量访问元素,如 a[0]a[1]a[2]

Array 与 std::vector 相似,除了使用索引,也可使用迭代器来访问所有元素。

for (Value::ConstValueIterator itr = a.Begin(); itr != a.End(); ++itr)

printf("%d ", itr->GetInt());

还有一些熟悉的查询函数:

  • SizeType Capacity() const
  • bool Empty() const

范围 for 循环 (v1.1.0 中的新功能)

当使用 C++11 功能时,你可使用范围 for 循环去访问 Array 内的所有元素。

for (auto& v : a.GetArray())

printf("%d ", v.GetInt());

查询 Object

和 Array 相似,我们可以用迭代器去访问所有 Object 成员:

static const char* kTypeNames[] =

{ "Null", "False", "True", "Object", "Array", "String", "Number" };

for (Value::ConstMemberIterator itr = document.MemberBegin();

itr != document.MemberEnd(); ++itr)

{

printf("Type of member %s is %s\n",

itr->name.GetString(), kTypeNames[itr->value.GetType()]);

}

Type of member hello is String

Type of member t is True

Type of member f is False

Type of member n is Null

Type of member i is Number

Type of member pi is Number

Type of member a is Array

注意,当 operator[](const char*) 找不到成员,它会断言失败。

若我们不确定一个成员是否存在,便需要在调用 operator[](const char*) 前先调用 HasMember()。然而,这会导致两次查找。更好的做法是调用 FindMember(),它能同时检查成员是否存在并返回它的 Value:

Value::ConstMemberIterator itr = document.FindMember("hello");

if (itr != document.MemberEnd())

printf("%s\n", itr->value.GetString());

范围 for 循环 (v1.1.0 中的新功能)

当使用 C++11 功能时,你可使用范围 for 循环去访问 Object 内的所有成员。

for (auto& m : document.GetObject())

printf("Type of member %s is %s\n",

m.name.GetString(), kTypeNames[m.value.GetType()]);

创建/修改值

有多种方法去创建值。 当一个 DOM 树被创建或修改后,可使用 Writer 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值