RapidJSON 获取值的成员名称

RapidJSON get member name of Value

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

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

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

然后我从中检索 "name" 数组:

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

我可以从 Value 中取回 "name" 吗?像这样:

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

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

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

对象的迭代器具有 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