使用rapidjson读取嵌套的Json

时间:2016-05-26 12:11:29

标签: c++ json rapidjson

这是我的Json数组。

{
    "colorsArray":[{
            "colorName":"red",
            "hexValue":"#f00"
        },
        {
            "colorName":"green",
            "hexValue":"#0f0"
        },
        {
            "colorName":"blue",
            "hexValue":"#00f"
        }
    ]
}

我希望获得价值'绿色'。我在quickjson库中的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();

当我尝试访问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 Library读取特定值?

1 个答案:

答案 0 :(得分:0)

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