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的价值。
答案 0 :(得分:0)
首先,我要问为什么你有一个包含这些不同元素的列表?如果language1
具有某些特殊含义,那么我会将数据拆分为study
和study1
或类似的内容。通常,列表应该是单一类型。
假设您无法更改格式,以下是您问题的答案。据我所知,从数组中获取内容的唯一方法是迭代它。
#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;
}
}
此代码迭代“study”列表中的所有内容,并查找带有“language1”键的条目,打印结果