想知道是否可以直接从中提取rapidjson::Value
的名称。
例如,假设我们有以下JSON数据:
{
"name":
[
{ /*some data*/ },
{ /*some more data*/ }
]
}
我从中检索“name”数组:
rapidjson::Value& myJSONArray = document["name"];
我可以从Value
取回“姓名”吗?像这样:
std::string memberName = myJSONArray.GetMemberName(); // returns "name"
答案 0 :(得分:1)
没有。这是不可能的,因为数组可能不在对象内。 你可以使用迭代器。
Value::MemberIterator itr = document.FindMember("name");
string n = itr->name.GetString();
Value& v = itr->value;
答案 1 :(得分:0)
对象的迭代器具有name
和value
属性
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() );
}