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 に答える