C++ 使用rapidjson读取嵌套Json

C++ 使用rapidjson读取嵌套Json,c++,json,rapidjson,C++,Json,Rapidjson,这是我的Json数组 { "colorsArray":[{ "colorName":"red", "hexValue":"#f00" }, { "colorName":"green", "hexValue":"#0f0" }, { "colorName":"blue", "hexVa

这是我的Json数组

{
    "colorsArray":[{
            "colorName":"red",
            "hexValue":"#f00"
        },
        {
            "colorName":"green",
            "hexValue":"#0f0"
        },
        {
            "colorName":"blue",
            "hexValue":"#00f"
        }
    ]
}
我想得到“绿色”的价值。我在RabijjsLob库中的C++代码是

Document document;
document.Parse<0>(jsoncontent.c_str()).HasParseError();
document.Parse(jsoncontent.c_str());
const Value& user = document["colorsArray"];
string name = user["colorName"].GetString();
文档;
Parse(jsoncontent.c_str()).HasParseError();
Parse(jsoncontent.c_str());
常量值&用户=文档[“colorsArray”];
string name=user[“colorName”].GetString();
当我尝试访问colorName时,我得到以下运行时错误

  rapidjson::GenericValue<Encoding, Allocator>::MemberIterator 
rapidjson::GenericValue<Encoding, Allocator>::FindMember(const 
rapidjson::GenericValue<Encoding, SourceAllocator>&) [with SourceAllocator
 = rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; 
Allocator = rapidjson::MemoryPoolAllocator<>; 
rapidjson::GenericValue<Encoding, Allocator>::MemberIterator = 
rapidjson::GenericMemberIterator<false, rapidjson::UTF8<>, 
rapidjson::MemoryPoolAllocator<> >]: Assertion `IsObject()' failed.

    Aborted (core dumped)
rapidjson::GenericValue::MemberIterator
rapidjson::GenericValue::FindMember(常量)
rapidjson::GenericValue&[使用SourceAllocator
=rapidjson::MemoryPoolAllocator;编码=rapidjson::UTF8;
分配器=rapidjson::MemoryPoolAllocator;
rapidjson::GenericValue::MemberIterator=
rapidjson::GenericMemberIterator]:断言“IsObject()”失败。
中止(堆芯转储)

如何使用Rapidjson库读取特定值?

简而言之,我认为该文档不完整。 如果将读取值代码放入循环体或线程中并运行程序,则在终止时会发生错误。因此,当您想要获取值时,首先判断文档是否为IsObject()

也许这是可行的:

Document document;
document.Parse<0>(jsoncontent.c_str()).HasParseError();
document.Parse(jsoncontent.c_str());
if(document.IsObject())        // add this line
{
    const Value& user = document["colorsArray"];
    string name = user["colorName"].GetString();
}
文档;
Parse(jsoncontent.c_str()).HasParseError();
Parse(jsoncontent.c_str());
if(document.IsObject())//添加此行
{
常量值&用户=文档[“colorsArray”];
string name=user[“colorName”].GetString();
}

这是一个数组,您需要首先获取第二个元素。自动和第二个_元素=用户[1];string name=second_element.GetString();还可以使用user.size()方法使用迭代。