请求一些示例程序使用Rapidjson解析嵌套对象

时间:2014-04-18 20:03:21

标签: c++ rapidjson

我一直在尝试解析一些包含嵌套对象的JSON数据,如下所示。

{"频道":{" route1":{" post1":" / opt / v1 / route1"},&# 34; route2":{" post2":" / opt / v1 / route2"}," route3":{" post3" :" / opt / v1 / route3"}}}

为了获取名称字符串和值,我的方法是获取对每个Value对象的引用并连续解析它们。由于嵌套的对象结构,我必须将引用存储到容器(例如STL堆栈)中以返回到正确的位置。但是,问题是由于引用的数据类型,无法将引用变量存储到STL堆栈中。

我还尝试创建一个包含Value实例引用变量的结构,并定义一个结构指针变量来存储到STL堆栈中。但是,当我试图将指针变量推入堆栈时。该计划终止。

你知道如何解析这种嵌套对象吗?

2 个答案:

答案 0 :(得分:0)

看一下http://www.json.org/,你会发现有一个C ++ JSON解析器列表可以用来解决你的问题。

它们都有某种类定义,可以帮助您访问嵌套属性。

除非你有非常专门的要求,否则你可能不想编写自己的解析器,因为乍看之下就更难了。

答案 1 :(得分:0)

string josn="{\"channels\": {\"route1\": {\"post1\": \"/opt/v1/route1\"}, \"route2\": {\"post2\": \"/opt/v1/route2\"}, \"route3\": {\"post3\": \"/opt/v1/route3\"}}} ";
    rapidjson::Document doc;

    if (!doc.Parse<0>(josn.c_str()).HasParseError()) {

        rapidjson::Value& channels=doc["channels"];

        printf("parsed string=%s\n",doc["channels"]["route1"]["post1"].GetString());

    }else{
        printf("error parsing the json %zu\n",doc.GetErrorOffset());
    }