2016-05-26 13 views
3

Dies ist mein Json-Array.Nested Json mit rapidjson lesen

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

Ich möchte Wert 'grün' erhalten. Meine C++ Code in rapidjson Bibliothek ist

Document document; 
document.Parse<0>(jsoncontent.c_str()).HasParseError(); 
document.Parse(jsoncontent.c_str()); 
const Value& user = document["colorsArray"]; 
string name = user["colorName"].GetString(); 

Wenn ich versuche, die colorname zuzugreifen, erhalte ich die folgenden Laufzeitfehler.

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) 

Wie kann ich einen bestimmten Wert mit Rapidjson Library lesen?

+1

Es ist ein Array, müssen Sie zuerst das zweite Element erhalten. auto & second_element = Benutzer [1]; Zeichenfolge name = second_element.GetString(); Sie können Iteration auch mit der Methode user.size() verwenden. – Jonathan

Antwort

-1

Kurz gesagt, meiner Meinung nach ist das Dokument unvollständig. Wenn Sie den Code mit dem Lesewert in einen Schleifenkörper oder einen Thread einfügen und das Programm ausführen, tritt der Fehler beim Beenden auf. Berücksichtigen Sie also das Dokument als IsObject(), wenn Sie einen Wert erhalten möchten.

Vielleicht kann diese Arbeit sein:

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(); 
}