基本概念
value
- 每个JSON值都存为Value类型。
- 而整个框架结构为Document。
Document 和Value的关系就是类似树结构和节点结构的关系。
数据类型
- Object : 键值对的集合,键必须是字串。
- Array
- String
对应的枚举分别是kObjectType, kArrayType,kStringType。 - 1,貌似还有bool类型? 那bool也是object的一种?
- 2,所有的数值在JSON 中都用IsNumber()来判断。
- 3,Array类型看来也是Object的一种。
- 4,还有迭代器雷西你给 ConstValueIterrator。
- 5,SizeType,尽管它只是unsigned 的typedef。
- 6,rapodjson中的数值,一般是unsigned,init,uint64_t,int64_t,double 这几种。
7,默认情况下创建的Value类型是Null。
一般来说,创建存储空间不固定的对象,都需要分配器。比如 Value key(“k”,doc.GetAllocator());
而Value key(42)就不需要。
空Object或者Array的办法有俩:
一是 Value obj;obj.SetObject();
二是 Value obj(kObjectType);
转移语义
把存储从一个变量移到另外一个,原先的被置为Null
流畅接口
转义函数
PushBack(); AddMember();
Value比较
== 和!=
DOM和JSON的互转
这里json就可以理解成一个字串。
分配器
Document document; Document::AllocatorType& allocator = document.GetAllocator();
对象类型
DOM模型用Document , doc;
根, Object类型的Value,例如 Value root(kObjectType);
增
// string 类型的value
一个值,类型为string ,例如:
Value name(kStringType);
设置Value类型的值:
name.SetString("hello",allocator);
放到root中,并用字串“name”作为key:
root.AddMember("name",name,allocator);
// 数组类型的value
Value sites(kStringType);
往里面添加元素
site.PushBack("hello",allocator).PushBack("world",allocator); root.AddMember("sites",sites,allocator);
从Value 写入到 string
StringBuffer buffer; Writer<StringBuffer> writer(buffer); root.Accept(writer); string strRoot = buffer.GetString(); char *pRoot = buffer.GetString();
查
doc.FindMember();