C++:使用nlohmann json从文件中读取json对象

use*_*814 14 c++ json file nlohmann-json

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

{
"happy": true,
"pi": 3.141
}
Run Code Online (Sandbox Code Playgroud)

我不太清楚如何处理这个问题.在https://github.com/nlohmann上,有几种方法可以从字符串文字中反序列化,但是将它扩展为读入文件似乎并不容易.有任何人对此有经验吗?

YSC*_*YSC 23

更新2017-07-03 for JSON for Modern C++版本3

3.0版开始,json::json(std::ifstream&)不推荐使用.应该使用json::parse():

std::ifstream ifs("{\"json\": true}");
json j = json::parse(ifs);
Run Code Online (Sandbox Code Playgroud)

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

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

std::ifstream ifs("{\"json\": true}");
json j(ifs);
Run Code Online (Sandbox Code Playgroud)

JSON for Modern C++版本1的原始答案

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

json j;
std::ifstream ifs("{\"json\": true}");
ifs >> j;
Run Code Online (Sandbox Code Playgroud)

  • 这应该根据@Markus的答案进行更新; 你现在应该使用json j = json :: parse(ifs); (4认同)
  • 您好,对于版本2.0.0,我添加了一个构造函数来直接处理输入流,因此您可以编写`json j(ifs);`.有关详细信息,请参见http://nlohmann.github.io/json/classnlohmann_1_1basic__json_a9857835334d38ba04959e348ca6be208.html#a9857835334d38ba04959e348ca6be208. (3认同)

小智 7

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

std::ifstream ifs("test.json");
json j = json::parse(ifs);
Run Code Online (Sandbox Code Playgroud)