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的文档。

 

posted on 2017-12-11 13:02  willaty  阅读(930)  评论(0编辑  收藏  举报

导航