rapidjson使用
Value构造
Value对象最好先声明后初始化,如果声明直接初始化可能出错。
rapidjson::Value a;
a = val[i];
Value传参
Value传参,最好显式使用右值,如std::move,或使用引用,否则可能出错。
Value移动
document的GetObject是移动的,里面的对象会被销毁。
Value默认都是移动的,传参都需要右值。
拷贝的话:
rapidjson::Document::AllocatorType& allot = config_document_.GetAllocator();
rapidjson::Value cp(rapidjson_value_, allot);
Array和Object的迭代器
Array的迭代器是ValueIterator;
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的文档。
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】