RapidJSON获取Value的成员名称

时间:2017-01-25 16:57:14

标签: c++ rapidjson

想知道是否可以直接从中提取rapidjson::Value的名称。

例如,假设我们有以下JSON数据:

{
    "name":
    [
        { /*some data*/ },
        { /*some more data*/ }
    ]
}

我从中检索“name”数组:

rapidjson::Value& myJSONArray = document["name"];

我可以从Value取回“姓名”吗?像这样:

std::string memberName = myJSONArray.GetMemberName(); // returns "name"

2 个答案:

答案 0 :(得分:1)

没有。这是不可能的,因为数组可能不在对象内。 你可以使用迭代器。

Value::MemberIterator itr = document.FindMember("name");
string n = itr->name.GetString();
Value& v = itr->value;

答案 1 :(得分:0)

对象的迭代器具有namevalue属性

std::pair<bool, std::string> iterate_items()
{
   constexpr std::string_view stringJson = R"([ {"k1": "v1"}, {"k2": "v2"}, {"k3": "v3"}, {"k4": "v4"} ])";
   // Wrap input stream for rapidjson reading
   rapidjson::MemoryStream memorystreamFile( stringJson.data(), stringJson.length() );
   rapidjson::Document documentJson;                                        // Create root rapidjson object

   documentJson.ParseStream( memorystreamFile );                            // Parse json file
   if( documentJson.IsArray() == true )                                     // Yes, we know it is an array :)
   {
      for( auto const& it : documentJson.GetArray() )                       // iterate array
      {
         if( it.IsObject() == true )                                        // They are all objects
         {
            auto const& _name = it.MemberBegin()->name;                     // get name
            auto const& _value = it.MemberBegin()->value;                   // get value
            std::cout << _name.GetString() << _value.GetString() << "\n";   // dump it
         }

      }
   }
   return std::pair<bool, std::string>( true, std::string() );
}

Tutorial with RapidJSON