2013-06-13 66 views
3

我一直試圖在過去的2天,發現我怎麼在C++以下的事情:c + +提振屬性樹獲取值

我有一個JSON字符串:

[ 
    { 
     "pid" : 0, 
     "nick":"Foo", 
     "score":12, 
     "ping":50 
    }, 
    { 
     "pid":1, 
     "nick":"Bar", 
     "score":23, 
     "ping":24 
    } 
] 

我想遍歷所有這些孩子,並將例如PlayerID的值放在std::vector中,以便我可以返回所有這些孩子。

當我被困在這裏:

// some code 
boost::property_tree::ptree pt; 
boost::property_tree::read_json(ss, pt); 

std::vector<int> players; 
int pid; 
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("pid")) // I also tried with pt or pt.get_child("") 
{ 
    pid = v.second.data(); 
    players.push_back(pid); 
} 
return players; 

我看了看文檔,但無法找到什麼好東西。另外,我已經嘗試了幾乎所有的東西,如果它沒有錯誤地編譯,它會給我什麼()期望的對象或類似的東西。我真的陷入困境,任何幫助表示讚賞!提前致謝。

回答

4

PropertyTree的JSON支持沒有輸入 - data()總是返回一個字符串。

從解析JSON中獲得的PTree應該包含一個根節點,該節點對於每個數組元素都有一個未命名的子節點。這些孩子中的每一個都有四個有價值的孩子。迭代的代碼應該是:

namespace bpt = boost::property_tree; 
bpt::ptree pt; 
bpt::read_json(ss, pt); 

std::vector<int> players; 
int pid; 

BOOST_FOREACH(bpt::value_type& v, pt) { // iterate over immediate children of the root 
    pid = v.second.get<int>("pid"); // use the converting path getter 
    players.push_back(pid); 
} 
+0

我已經試過了藏漢,試了一下,現在再次但是''''終止叫做拋出的「助推:: exception_detail :: clone_impl <提振:: exception_detail的實例後:: error_info_injector >' 什麼():<未指定文件>(1):預期對象 '''' –

+1

什麼版本的Boost?您正在觀察Bug 4387(https://svn.boost.org/trac/boost/ticket/4387); JSON解析器不允許頂層數組。我在兩年前解決了這個問題。 –

+1

那麼,從我的軟件包管理器告訴我 - 「版本:1.42.0」。 –