rapidjson使用

时间:2023-03-09 01:15:05
rapidjson使用

Value构造

Value对象最好先声明后初始化,如果声明直接初始化可能出错。

  1. rapidjson::Value a;
  2. a = val[i];

Value传参

Value传参,最好显式使用右值,如std::move,或使用引用,否则可能出错。

Value移动

document的GetObject是移动的,里面的对象会被销毁。 
Value默认都是移动的,传参都需要右值。 
拷贝的话:

  1. rapidjson::Document::AllocatorType& allot = config_document_.GetAllocator();
  2. rapidjson::Value cp(rapidjson_value_, allot);

Array和Object的迭代器

  1. Array的迭代器是ValueIterator;
  2. Object的迭代器是MemberIterator;

附上一段dfs代码:

void DfsDocument(rapidjson::Value val) {
// cout << val.GetType() << endl;
if (!val.GetType()) return;
switch (val.GetType()) {
case rapidjson::kNumberType:
cout << val.GetInt() << endl;
break;
case rapidjson::kStringType:
cout << val.GetString() << endl;
break;
case rapidjson::kArrayType:
for (rapidjson::Value::ValueIterator itr = val.GetArray().begin();
itr != val.GetArray().end(); ++itr) {
rapidjson::Value a;
a = *itr;
DfsDocument(std::move(a));
}
break;
case rapidjson::kObjectType:
for (rapidjson::Value::MemberIterator itr = val.GetObject().begin();
itr != val.GetObject().end(); ++itr) {
cout << itr->name.GetString() << endl;
rapidjson::Value a;
a = itr->value;
DfsDocument(std::move(a));
}
default:
break;
}
return;
}

详细使用请参考作者Milo Yip的文档。