nlohmann json:为什么我会得到一个parse error?

7bsow1i6  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(320)

我真的很困惑,为什么我得到一个解析错误,当我试图解析一个文件在C++使用nlohmann库。
我的代码与我从他们的GitHub页面复制的代码完全相同:

using json = nlohmann::json;

int main() {
    ifstream ifs("test.json");

    if (nlohmann::json::accept(ifs))
        cout << "accepted" << endl;
    else
        cout << "not accepted" << endl;

    json j = json::parse(ifs);
}

JSON文件就是这样的:

{ 
   "test": 5
}

出于某种原因,当我到达parse()函数时,这会抛出一个错误,尽管accept()函数返回true,这意味着JSON被接受为有效。
当我做这样的事情时:

json j = json::parse(R"({"test": "aaa"})");

这样就行了。但是我不能解析ifstream对象。
有谁知道这里可能有什么问题吗?
我不知道,我也不知道,因为似乎我做的一切都是对的。

avkwfej4

avkwfej41#

一旦nlohmann::json::accept返回,流ifs就被消耗了。
当你稍后使用json::parse(ifs)时,你试图解析本质上是一个空文件,而空字符串不是一个有效的json文档。
您需要倒带或重新打开文件。

// rewind
ifs.clear();
ifs.seekg(0);
json j = json::parse(ifs);

// reopen
json j = json::parse(std::ifstream{"test.json"});

相关问题