我真的需要帮助来决定我的问题。我正在使用 boost属性树来解析存储在json文件中的Twitter消息。所有消息都保存在一个json文件中,我需要逐个解析所有消息。
这是保存在文件中的twitter json数据。它有3个不同的消息。 (以下仅为测试扣除消息)
{"id":593393012970926082,"in_reply_to_status_id":1,"user":{"id":2292380240,"followers_count":2},"retweet_count":0}
{"id":654878454684687878,"in_reply_to_status_id":7,"user":{"id":2292380241,"followers_count":4},"retweet_count":5}
{"id":123487894154878414,"in_reply_to_status_id":343,"user":{"id":2292380242,"followers_count":773},"retweet_count":654}
这是我使用属性树解析消息的C ++代码。
#include <boost/property_tree/json_parser.hpp>
using namespace std;
using namespace boost::property_tree;
string jsonfile = "./twitter.json";
int main()
{
ptree pt;
read_json( jsonfile, pt );
cout<<"in_reply_to_status_id: "<<pt.get("in_reply_to_status_id",0)<<"\n";
}
我想从文件中获取所有 in_reply_to_status_id 值。现在它只打印第一行值。结果是打印如下。
in_reply_to_status_id:1
我想获得如下所示的所有值。
in_reply_to_status_id:1
in_reply_to_status_id:7
in_reply_to_status_id:343
如何从文件中获取所有值。 请帮我。非常感谢你。
答案 0 :(得分:0)
你应该有正确的json文件,例如像这样
[
{"id":593393012970926082,"in_reply_to_status_id":1,"user":{"id":2292380240,"followers_count":2},"retweet_count":0},
{"id":654878454684687878,"in_reply_to_status_id":7,"user":{"id":2292380241,"followers_count":4},"retweet_count":5},
{"id":123487894154878414,"in_reply_to_status_id":343,"user":{"id":2292380242,"followers_count":773},"retweet_count":654}
]
代码应该是这样的
for (const auto& p : pt)
{
cout << p.second.get("in_reply_to_status_id",0) << endl;
}
您可以使用range-based for
代替BOOST_FOREACH
,而不是BOOST_FOREACH(const ptree::value_type& p, pt)
。
\b(JIN|DIN|CIN|PIN|JCN|DCN|CCN)\d{6}\b
答案 1 :(得分:0)
你可以看到我的例子,首先你应该得到子树,然后解析它。我的代码:
string str = "{\"key\":[{\"id\":1}, {\"id\":2}]}";
stringstream ss(str);
boost::property_tree::ptree parser, child;
boost::property_tree::json_parser::read_json(ss, parser);
child = parser.get_child("key");
for(auto& p : child)
cout << p.second.get<uint32_t>("id") << endl;
我希望这可以帮到你。