阅读&解析JSON文件c ++ BOOST

时间:2015-07-06 16:54:05

标签: c++ json boost boost-propertytree

由于已经有很多问题,我有点担心要问......但是

我看过许多不同的问题,其中任何一个都没有为我工作。我有这个代码作为我的尝试,但它没有工作:

#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/json_parser.hpp"
using namespace boost::property_tree;
...
std::ifstream jsonFile("test_file.json");
if (!jsonFile){
    std::cerr << "Error opening file\n";
    return -1;
}
ptree pt;
json_parser::read_json(jsonFile, pt);
for (auto& array_element : pt) {
    for (auto& property : array_element.second) {
        std::cout << property.first << " = " << property.second.get_value<std::string>() << "\n";
    }
}

其内容采用以下格式:

[{"number": 1234,"string": "hello world"}, {"number": 5678,"string": "foo bar"}, ... etc }]

我无法宣读1234,然后是hello world。事实上,它什么也没做。如何从我的.JSON文件中读出来?

1 个答案:

答案 0 :(得分:1)

我不完全确定问题是什么。它似乎工作(一旦你使JSON有效):

<强> Live On Coliru

#include "boost/property_tree/ptree.hpp"
#include "boost/property_tree/json_parser.hpp"

int main() {
    using boost::property_tree::ptree;

    std::ifstream jsonFile("input.txt");

    ptree pt;
    read_json(jsonFile, pt);

    for (auto & array_element: pt) {
        for (auto & property: array_element.second) {
            std::cout << property.first << " = " << property.second.get_value < std::string > () << "\n";
        }
    }
}

input.txt包含:

[{"number": 1234, "string": "hello world"},{"number": 5678, "string": "foo bar"}]

打印

number = 1234
string = hello world
number = 5678
string = foo bar