[英]Reading JSON with Boost property_tree
我正在嘗試使用Boost的property tree
來解析JSON文件。 這是JSON文件
{
"a": 1,
"b": [{
"b_a": 2,
"b_b": {
"b_b_a": "test"
},
"b_c": 0,
"b_d": [{
"b_d_a": 3,
"b_d_b": {
"b_d_c": 4
},
"b_d_c": "test",
"b_d_d": {
"b_d_d": 5
}
}],
"b_e": null,
"b_f": [{
"b_f_a": 6
}],
"b_g": 7
}],
"c": 8
}
和一個MWE
#include <iostream>
#include <fstream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
namespace pt = boost::property_tree;
using namespace std;
int main()
{
boost::property_tree::ptree jsontree;
boost::property_tree::read_json("test.json", jsontree);
int v0 = jsontree.get<int>("a");
int v1 = jsontree.get<int>("c");
}
問題我目前知道如何讀取最外面的變量a
和c
。 但是,我在閱讀其他級別時遇到困難,例如b_a, b_b_a, b_d_a
等。 我怎么能用Boost做到這一點? 我不一定在尋找一個涉及循環的解決方案,只是想弄清楚如何“提取”內部變量。
如果它們是最佳的,我願意使用其他庫。 但到目前為止,Boost看起來很有希望。
要獲取嵌套元素,可以使用路徑語法,其中每個路徑組件由"."
分隔"."
。 這里的事情有點復雜,因為子節點b
是一個數組。 所以你不能沒有循環。
const pt::ptree& b = jsontree.get_child("b");
for( const auto& kv : b ){
cout << "b_b_a = " << kv.second.get<string>("b_b.b_b_a") << "\n";
}
我還添加了代碼來遞歸打印整個樹,這樣你就可以看到JSON如何被轉換為ptree。 數組元素存儲為鍵/值對,其中鍵是空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.