0

Rapidjson に精通しているすべての人に、次の問題があり
ます。日付をパラメーターとして受け入れる特定の関数があり、その日付が json ファイルに存在する場合、メソッドはいくつかの操作を実行し、そうでない場合は他の操作を実行します。
一般的には次のようになります: (疑似のような実際のコードではありません)

関数:

void updateData(string date) {
    //
    //code to turn date from string to const char* (tested)
    //
    if (v.HasMember(date)) { //v is a value
        Value d;
        d=v[date];
        //
        //code that involves getting data from d (d is object) using HasMember
        //
    } else {
        //generic code that has nothing to do with json
    }

JSON ファイル:

{
    "main": {
        "v": {
           "2014-10-02" : {
                //some fields
           },
           "2014-10-03" : {
                //some fields
           }
         }
     }    
}

したがって、日付「2014-10-02」のupdateDataを初めて呼び出すと、正しく実行されます(if部分を実行します)。
問題は、別の日付の updateData を呼び出すと (「2014-10-03」など、うまく機能するはずです)、常に間違った部分 (else 部分) が実行され、最初の日付に戻っても実行されます。他の部分。(多くのアサーションをポップしながら (ほとんど isString()))。
オブジェクトを変更している可能性があるという意味で、HasMember は本当に問題なのでしょうか?
それ以外に、メンバーを検索する別の方法はありますか?
どんなヒントでも大歓迎です...

4

1 に答える 1

1

実際のコードがないとわかりにくいですが、「v」をオブジェクトではなく値として扱っていることが問題かもしれません。「v」は値ではなく、オブジェクトの名前です。あなたが持っているのはネストされたオブジェクトです。これを行うには、MemberIterators を使用して v オブジェクトの子オブジェクトを反復処理する必要があると思います。

Rapidjson には、イテレータの使用方法に関するかなり良い例があります。

ここにもこの質問があり、ネストされたオブジェクトの使用方法についてかなり良い答えがあります

Rapidjson を使用して JSON 文字列内のネストされたオブジェクトを取得する

于 2014-10-02T21:06:20.083 に答える