Extracting content from JSON in C ++ using Boost library
This is my JSON file.
{
"found":3,
"totalNumPages":1,
"pageNum":1,
"results":
[
{
"POSTAL":"000000"
},
{
"POSTAL":"111111"
},
{
"POSTAL":"222222"
}
]
}
Here is the C ++ code.
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
int main()
{
// Short alias for this namespace
namespace pt = boost::property_tree;
// Create a root
pt::ptree root;
// Load the json file in this ptree
pt::read_json("filename.json", root);
std::vector< std::pair<std::string, std::string> > results;
// Iterator over all results
for (pt::ptree::value_type &result : root.get_child("results"))
{
// Get the label of the node
std::string label = result.first;
// Get the content of the node
std::string content = result.second.data();
results.push_back(std::make_pair(label, content));
cout << result.second.data();
}
}
I need every set of child values to be in parent ( "results"
), but it prints blank. I have tried using
root.get_child("results.POSTAL")
but because of the square bracket, it throws an error. Any advice?
+3
source to share
1 answer
Arrays in the Boost property tree are represented as objects with multiple unnamed properties.
So just flip them over:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <iostream>
int main()
{
namespace pt = boost::property_tree;
pt::ptree root;
pt::read_json("filename.json", root);
std::vector< std::pair<std::string, std::string> > results;
// Iterator over all results
for (pt::ptree::value_type &result : root.get_child("results."))
for (pt::ptree::value_type &field : result.second)
results.push_back(std::make_pair(field.first, field.second.data()));
for (auto& p : results)
std::cout << p.first << ": " << p.second << "\n";
}
Printing
POSTAL: 000000
POSTAL: 111111
POSTAL: 222222
0
source to share