0

我目前正在尝试将 json 文件读入一个对象。我使用的 nlohmann-json 版本是 3.7.3。我遵循了该文档中的示例代码,如下所示

// read a JSON file
std::ifstream i("file.json");
json j;
i >> j;

我的实现是有一个返回 json 对象的简单函数,所以很简单:

nlohmann::json UTSF::readJSONFile(std::string filename)
{ 
       std::ifstream i("file.json");
       json j;
       i >> j;
       return j;
}

我收到以下错误no operator ">>" matches these operands operand types are: json >> std::ifstream

所以我做了一些调查,在 3.7.3 版本中不再使用这种方式。我也研究json.parse过使用,但效果不佳。

对 nlohmann-jsonversion 3.7.3 执行此操作的最新方法是什么?我在将 json 写入文件时也遇到了类似的问题

这是我写的一个最小的可重现示例,它给了我同样的错误;

#include <iostream>
#include <nlohmann/json.hpp>
#include <fstream>
using json = nlohmann::json;

nlohmann::json readJSONFile(std::string filename)
{
    std::ifstream i(filename);
    json j;
    i >> j;
    return j;
}

int main()
{
    nlohmann::json x;
    x = readJSONFile("file.json");
    std::cout << x.dump(4) << std::endl;
}

错误列表

4

1 回答 1

0

对于 nlohmann,我使用这个简单的函数

#include <nlohmann/json.hpp>

....

nlohmann::json ReadJsonFromFile(std::string file_name) {

    try {
        return nlohmann::json::parse(std::ifstream{file_name, std::ios::in});
    } catch (nlohmann::json::parse_error& e) {
        std::cerr << "JSON parse exception : " << e.what() << std::endl;
    } catch (std::ifstream::failure& e) {
        std::cerr << "Stream exception : " << e.what() << std::endl;
    } catch (std::exception& e) {
        std::cerr << "Exception : " << e.what() << std::endl;
    } catch (...) {
        std::cerr << "Unk error" << std::endl;
    }

    return {};
}
于 2020-04-07T20:39:23.777 回答