2011-07-01 30 views
0
int main(int argc, char *argv[]) 
{ 

    QCoreApplication a(argc, argv); 

    // string s = "{\"age\":23,\"study\":{\"language\":{\"one\":\"chinese\",\"subject\":[{\"one\":\"china\"},{\"two\":\"Eglish\"}]}}}"; 

    string s = "{\"age\" : 26,\"person\":[{\"id\":1,\"study\":[{\"language\":\"chinese\"},{\"language1\":\"chinese1\"}],\"name\":\"chen\"},{\"id\":2,\"name\":\"zhang\"}],\"name\" : \"huchao\"}"; 
    ptree pt; 
    stringstream stream(s); 
    read_json<ptree>(stream, pt); 

    int s1=pt.get<int>("age"); 
    cout<<s1<<endl; 

    string s2 = pt.get<string>("person."".study."".language1"); 
    cout<<s2<<endl; 

現在我想要得到language1的值。如何使用boost :: property_tree訪問JSON數組?

+0

你_did_得到「LANGUAGE1」的價值。這是你從上一個'pt.get'語句獲得的字符串;你用's2'存儲了ti。你到底在問什麼? –

+0

我想知道如何通過pt.get語句獲得「language1」的值,但我不知道如何得到它。 – wyz365889

回答

0

首先,我必須問,爲什麼你有一個列表中有這樣不同的元素?如果language1有一些特殊的含義,那麼我會將數據分成studystudy1或類似的東西。一般而言,列表應該是單一類型。

假設你不能改變格式,這裏是你的問題的答案。據我所知,從數組中獲取某些東西的唯一方法就是迭代它。

#include <boost/foreach.hpp> 

BOOST_FOREACH(const ptree::value_type& val, pt.get_child("person.study")) 
{ 
    boost::optional<string> language1Option = v.second.get_optional<string>("language1"); 
    if(language1Option) { 
    cout<<"found language1: "<<*language1Option<<endl; 
    } 
} 

此代碼遍歷在「研究」名單一切,尋找一個「LANGUAGE1」鍵的條目,打印結果