0

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

{"channels": {"route1": {"post1": "/opt/v1/route1"}, "route2": {"post2": "/opt/v1/route2"}, "route3": {" post3": "/opt/v1/route3"}}}

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

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

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

4

2 回答 2

0

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

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

除非您有非常特殊的要求,否则您可能不想编写自己的解析器,因为乍一看更难。

于 2014-04-18T20:27:42.233 回答
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());
    }
于 2015-11-30T07:30:36.267 回答