2012-04-06 44 views
10
{"hi": "hellow", 
"first": 
    {"next":[ 
      {"key":"important_value"} 
     ] 
    } 

} 

訪問RapidJSON內部數組得到一個數組內的值:RapidJSON庫通過其索引

這個工程:cout << "HI VALUE:" << variable["hi"].GetString() << endl;這將輸出:hellow預期,問題是訪問一樣,如果我想裏面的值得到「Important_Value」,我試過這樣的:cout << "Key VALUE:" << variable["first"]["next"][0]["key"].GetString() << endl ;,但這不起作用,我希望能夠通過數組的第一項獲得「important_value」,在這種情況下,它是導致錯誤的[0]

我該如何做它的索引? 我希望這很清楚我的解釋。

在此先感謝。

回答

20

JSON

{"hi": "hellow", "first": {"next":[{"key":"important_value"} ] } } 

代碼:

rapidjson::Document document;  

if (document.Parse<0>(json).HasParseError() == false) 
{ 
    const Value& a = document["first"]; 

    const Value& b = a["next"]; 

    // rapidjson uses SizeType instead of size_t. 
    for (rapidjson::SizeType i = 0; i < b.Size(); i++) 
    { 
     const Value& c = b[i]; 

     printf("%s \n",c["key"].GetString()); 
    }   
} 

將打印important_value

+1

這不會回答任何問題,用括號[]代替我的例子,括號是問題,因爲它是數組的自動位置,第一個是0,下一個是1等等。 。你做了什麼,我已經有了,試着得到我的例子中的值,使用相同的來源。 – Grego 2012-04-07 01:40:08

+0

試試這個........ – mola10 2012-04-07 14:44:39

+0

這正是我想要訪問數組成員中的嵌套對象。 +1 – haxpor 2014-10-08 13:59:27

2

我在tutorial.cpp文件中注意到了這一點;

// Note: 
//int x = a[0].GetInt();   // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type. 
int y = a[SizeType(0)].GetInt(); // Cast to SizeType will work. 
int z = a[0u].GetInt();   // This works too. 

我沒有測試它,但你可能想嘗試其中之一;

變量[ 「第一」] [ 「下一個」] [0U] [ 「鑰匙」]。GetString的()

變量[ 「第一」] [ 「下一個」] [的SizeType(0)] [」鑰匙「]。GetString的()

13

[更新]

貢獻者的聰明工作,RapidJSON現在可以從字符串字面歧義0。所以這個問題不再發生。

https://github.com/miloyip/rapidjson/issues/167


的問題,因爲mjean指出的,編譯器就無法確定它是否應該調用對象的成員存取器或陣列元素訪問,通過literial 0

GenericValue& operator[](const Ch* name) 
GenericValue& operator[](SizeType index) 

使用[0u][SizeType(0)]可以解決此問題。

解決此問題的另一種方法是停止使用操作符[]的重載版本。例如,使用operator()作爲一種訪問類型。或使用正常功能,例如GetMember(),GetElement()。但我現在沒有偏好這個權利。歡迎其他建議。

0

如果你想用括號來訪問它,那麼你可以使用以下命令:

int i=0; 
cout<<"Key VALUE:"<<variable["first"]["next"][i]["key"].GetString()<<endl ; 

輸出:Key值:important_value

它爲我工作。