Ich versuche Boost property tree
zu verwenden, um eine JSON-Datei zu analysieren. Hier ist die JSON-DateiJSON mit Boost lesen 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
}
und ein 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");
}
Frage ich zur Zeit wissen, wie die äußersten Variablen lesen a
und c
. Ich habe jedoch Schwierigkeiten beim Lesen anderer Ebenen wie b_a, b_b_a, b_d_a
und so weiter. Wie kann ich das mit Boost machen? Ich suche nicht unbedingt nach einer Lösung mit Schleifen, sondern versuche nur herauszufinden, wie man innere Variablen "extrahiert".
Ich bin offen für die Verwendung anderer Bibliotheken, wenn sie optimal sind. Aber bis jetzt sieht Boost vielversprechend aus.
Sie können "." Trennzeichen zum Festlegen des Pfades zu verschachtelten Knoten wie 'jsontree.get (" b.b_b.b_b_a ")' –
zett42
Für JSON würde ich generell eine von zwei Möglichkeiten empfehlen. Wenn Sie so etwas wie einen REST-Server tun, der so schnell wie möglich mit * massiven * JSON-Mengen arbeiten muss, möchten Sie [RapidJSON] (https://github.com/miloyip/rapidjson). Für fast alles andere wünschst du wahrscheinlich [Nlohmanns JSON-Bibliothek] (https://github.com/nlohmann/json). –
@ zett42 Ich habe es ausprobiert, bekomme ich einen Fehler: 'Beenden aufgerufen nach dem Werfen einer Instanz von 'boost :: exception_detail :: clone_impl>' was(): Kein solcher Knoten (b.b_b.b_b_a) ' –
BillyJean