我正在使用nlohmann的json库在C ++中处理JSON对象。最终,我想从文件中读取JSON对象,例如像这样的简单对象。
{
"happy": true,
"pi": 3.141
}
我不太确定如何处理这个问题。在https://github.com/nlohmann上提供了几种从字符串序列化的方式,但似乎不容易扩展到读入文件。有没有人有相关经验?
我正在使用nlohmann的json库在C ++中处理JSON对象。最终,我想从文件中读取JSON对象,例如像这样的简单对象。
{
"happy": true,
"pi": 3.141
}
我不太确定如何处理这个问题。在https://github.com/nlohmann上提供了几种从字符串序列化的方式,但似乎不容易扩展到读入文件。有没有人有相关经验?
自从 版本 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 FAQ。
自版本2.0以来,json::operator>>()
已被弃用。 应改为使用json::json()
:
std::istringstream ifs("{\"json\": true}");
json j(ifs);
使用json::operator>>(std::istream&)
。json j;
std::stringstream ifs("{\"json\": true}");
ifs >> j;
构造函数 json j(ifs)
已被弃用,并将在3.0.0版本中删除。自2.0.3版本以来,您应该编写:
std::ifstream ifs("test.json");
json j = json::parse(ifs);
json j(ifs);
。查看http://nlohmann.github.io/json/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html#a9857835334d38ba04959e348ca6be208获取更多详情。 - Niels Lohmannifstream
在超出范围时会关闭流。手动关闭* fstream
很少这样做。只有在您想要使用相同的* fstream
“关闭”然后“打开”其他内容时才会执行此操作。 - Ted Lyngmostd::ifstream
上启用异常处理,以确定文件是否成功打开和读取呢? - BullyWiiPlaza