2011-07-01 4 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

あなたが「language1」の値を取得_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; 
    } 
} 

このコードは、「研究」リスト内のすべてを反復処理し、結果

関連する問題