Récupération d'un objet imbriqué à l'intérieur d'une chaîne JSON à l'aide de rapidjson

J'ai besoin de récupérer un objet imbriqué à l'intérieur d'une chaîne JSON et je suis en train de le faire en utilisant rapidjson. Tout ce que j'ai trouvé est de savoir comment récupérer des tableaux et des types de base, mais pas de sous-objets. J'ai créé le jouet exemple qui donne une erreur:

rapidjson::Document document;
std::string test =  " { \"a\": { \"z\" : 21 } } ";
std::cout << test << std::endl;
if ( document.Parse<0>( test.c_str() ).HasParseError() ) {
    std::cout << "Parsing error" << std::endl;
} else {
    if ( document[ "a" ].IsObject() ) {
        std::cout << "OK" << std::endl;
        std::cout << document[ "a" ].GetString() << std::endl;
    }
}

C'est la sortie lors de l'exécution:

{ "a": { "z" : 21 } } 
OK
JSONTest: ../rapidjson/document.h:441: const typename Encoding::Ch* rapidjson::GenericValue<Encoding, Allocator>::GetString() const [with Encoding = rapidjson::UTF8<char>, Allocator = rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>]: Assertion `IsString()' failed. Aborted

Comment puis-je récupérer l'objet interne pour continuer mon analyse? Merci.

Modifier: Ce dont j'ai besoin est d'obtenir la représentation de chaîne de l'objet interne donc je peut en appeler une autre fonction qui va l'analyser.

Edit 2: le code qui permet de récupérer l'objet interne comme une chaîne de caractères:

rapidjson::Document document;
std::string test =  "{\"a\":{\"z\":21}} ";
if ( document.Parse<0>( test.c_str() ).HasParseError() ) {
    std::cout << "Error parsing" << std::endl;
} else {
    if ( document[ "a" ].IsObject() ) {
        rapidjson::StringBuffer sb;
        rapidjson::Writer<rapidjson::StringBuffer> writer( sb );
        document[ "a" ].Accept( writer );
        std::cout << sb.GetString() << std::endl;
    }
}
Ça veut dire que RapidJson ne prend pas en charge les objets hiérarchiques? alors qu'à analyser le niveau de la racine?!?!

OriginalL'auteur pparescasellas | 2012-10-05