2012-10-26 108 views
4

我正在使用jsoncpp解析器(http://jsoncpp.sourceforge.net)來解析JSON數據。 所以,如果我們有如下的JSON:如何從json-cpp解析器獲取屬性名稱和屬性值?

{ "name": "Joseph", "age": 20 } 

我怎樣才能獲得屬性約瑟夫,...歲和20後? OK,我們可以做普遍這樣的:

string e = root.get(propertyName, defaultValue).asString(); 

真正我們想要的東西:

string e = root.get(name, "Mark").asString(); 

現在,可變ê是約瑟夫,它的工作原理。但我採取/寫「名稱」。我不想查詢(不詢問我想獲得的功能「名稱」(財產的名稱)和「約瑟夫」(財產價值))。

這將是最好的(C/C++爲例)存儲後:

property[name][0] = "Joseph" 
property[age][0] = 20 

我怎麼能這樣做?還是其他想法?

+0

你從文檔中學到了什麼?在訴諸我們之前,你曾進行過哪些調查? –

+0

文檔沒有提到這個問題。 – RePRO

+0

我不知道你問題的最後一部分後的情況,但我試圖在下面的答案中填寫屬性名稱空缺。 –

回答

5

您可以使用getMemberNames()函數獲取Json :: Value對象的所有成員名稱。返回一個對象,您可以像使用其他標準庫容器一樣使用.begin().end()進行迭代。 (實際上,返回類型是std::vector<std::string>的別名。)

擁有成員名稱之後,您應該可以遍歷它們並使用.get(std::string &, const ValueType &),因爲您已經在爲獲取每個對象的值鍵。


請注意,JSON對象本質上是無序的,所以您不一定依賴那個具有任何排序順序的名稱列表。如果你想要一個有序的對象,你應該使用JSON數組,而不是JSON對象。

+0

不,在未來的C++中,我需要這樣的: string age = 20; string name =「Joseph」; void fc(age,name); 但是我們不知道屬性名稱**名稱**。 – RePRO

+0

用你可以嘗試的東西編輯。 –

+0

更好的編輯,謝謝。那這個呢?每個(var key在obj中)代碼{ cout <<「name =」<< key <<「value =」<< obj [key]; }'code' – RePRO

-8

你基本上是問如何枚舉鍵並提取相應的值?

read thedocumentation —這裏列出了必要的函數調用。

+4

不知道這個答案。似乎提問者可能會有一些概念問題,並且這些問題可能不易通過鏈接到一個不耐煩的答案中嵌入的文檔來解決。 –

+2

在文檔中,您無法找到關於此特定問題的答案。 ;) – RePRO

+1

我怎麼看,沒人理解我。 ;) – RePRO