2014-10-02 198 views
0

對於所有熟悉rapidjson的人,我有以下問題:
我有一個接受參數作爲日期的特定函數,如果該日期存在於json文件中,該方法執行一些操作,並且if不是其他一些操作。
一般來說它看起來像這樣:(而不是實際的代碼更像僞)HasMember期間的Rapidjson斷言

功能:

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真的是這裏的問題,從某種意義上說它可能會改變對象?
除此之外,還有其他方法可以搜索成員嗎?
任何提示是讚賞...

回答

1

它很難說沒有實際的代碼,但我認爲問題可能是你對待「v」作爲一個值而不是一個對象。 「v」不是一個值,它是對象的名字。所以你有一個嵌套的對象。爲了做到這一點,我認爲你將不得不使用MemberIterator並遍歷v對象中的子對象。

rapidjson在如何使用迭代器方面有一個很好的例子。

也有這個問題在這裏,這對如何使用嵌套對象

Retrieving a nested object inside a JSON string using rapidjson

+0

所以基本上與對象的成員進行互動的唯一方法是使用迭代器一個很好的答案嗎? – TheDillo 2014-10-02 21:28:12

+0

對於嵌套對象,這只是我得到它的工作方式,雖然在我的情況下,它也恰好是最有意義的方式。 – 2014-10-02 23:25:18