36

我正在使用 nlohmann 的 json 库来处理 c++ 中的 json 对象。最终,我想从文件中读取一个 json 对象,例如像这样的一个简单对象。

{
"happy": true,
"pi": 3.141
}

我不太确定如何解决这个问题。在https://github.com/nlohmann提供了几种从字符串文字反序列化的方法,但是将其扩展为读取文件似乎并不简单。这个事情谁有经验?

4

2 回答 2

60

适用于现代 C++ 版本 3的 JSON 更新 2017-07-03

3.0 版以来,json::json(std::ifstream&)已弃用。应该json::parse()改用:

std::ifstream ifs("test.json");
json jf = json::parse(ifs);

std::string str(R"({"json": "beta"})");
json js = json::parse(str);

有关如何使用 nlohmann 的 json 库的更多基本信息,请参阅nlohmann 常见问题解答


现代 C++ 版本 2的 JSON 更新

2.0 版开始json::operator>>() id deprecated. 应该json::json()改用:

std::ifstream ifs("{\"json\": true}");
json j(ifs);

现代 C++ 版本 1的 JSON 的原始答案

使用json::operator>>(std::istream&)

json j;
std::stringstream ifs("{\"json\": true}");
ifs >> j;
于 2015-11-10T10:55:08.500 回答
12

构造函数json j(ifs)已弃用,将在版本 3.0.0 中删除。从 2.0.3 版开始,您应该编写:

std::ifstream ifs("test.json");
json j = json::parse(ifs);
于 2016-11-16T09:59:56.257 回答