3
我試圖使用Boost的property tree
來解析JSON文件。這裏是JSON文件使用Boost讀取JSON property_tree
{
"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看起來對我很有希望。
您可以使用「。」分隔符來指定路徑到嵌套節點,比如'jsontree.get(「b.b_b.b_b_a」)' –
zett42
對於JSON,我通常會推薦兩種可能性之一。如果你像REST服務器那樣需要以儘可能快的速度對大量JSON進行操作,那麼你需要[RapidJSON](https://github.com/miloyip/rapidjson)。幾乎所有的事情,你可能都想要[Nlohmann的JSON庫](https://github.com/nlohmann/json)。 –
@ zett42我試過了,我收到一個錯誤:'拋出'boost :: exception_detail :: clone_impl>實例後終止調用' ():沒有這樣的節點(b.b_b.b_b_a)' –
BillyJean