使用 Boost 库从 C++ 中的 JSON 检索内容
Posted
技术标签:
【中文标题】使用 Boost 库从 C++ 中的 JSON 检索内容【英文标题】:Retrieve content from JSON in C++ using Boost library 【发布时间】:2017-04-17 08:19:02 【问题描述】:这是我的 JSON 文件。
"found":3,
"totalNumPages":1,
"pageNum":1,
"results":
[
"POSTAL":"000000"
,
"POSTAL":"111111"
,
"POSTAL":"222222"
]
这是 C++ 代码。
#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();
我需要让每组子值驻留在父级 ("results"
) 中,但它打印出空白。我试过使用
root.get_child("results.POSTAL")
但是因为有方括号,会报错。有什么建议吗?
【问题讨论】:
这应该有助于***.com/questions/17124652/… 请养成将确切的错误信息复制到问题中的习惯。 【参考方案1】:Boost 属性树中的数组表示为具有多个未命名属性的对象。
因此,只需遍历它们:
Live On Coliru
#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";
打印
POSTAL: 000000
POSTAL: 111111
POSTAL: 222222
【讨论】:
以上是关于使用 Boost 库从 C++ 中的 JSON 检索内容的主要内容,如果未能解决你的问题,请参考以下文章