当我try 使用nlohmann库在C++中解析文件时,我真的很困惑为什么会收到解析错误.

我的代码与我从他们的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对象.

有谁知道这里可能出了什么问题吗?

我没有 idea ,我也没有头绪,因为似乎我做的每件事都是对的.

推荐答案

一旦已返回nlohmann::json::accept,则流ifs已被消耗.

当您在json::parse(ifs)之后,您try 解析本质上是空文件的内容,而空字符串不是有效的json文档.

您需要倒带流或重新打开您的文件.

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

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

Json相关问答推荐

如何使用JQ将JSON字符串替换为解析后的类似功能?

为什么JQ筛选器不将原始输入打印为$var|.';文档?

需要有关在Ffltter应用程序中解码JSON的帮助;未处理的异常:类型不是类型转换中类型的子类型

合并2个嵌套词典

当由.sh脚本执行时,AWS查询字符串不会提取任何数据

使用 JSON 和相对日期设置日历视图中 SharePoint 列表项的背景 colored颜色 格式

将 json 转换为 jsonb 安全吗?

Android 如何判断小时时间是否在两个时间之间?

从 Inno Setup 中的 JSON 文件的每个对象中读取特定字符串

ETCD 导出为 json 并从 base64 解码所有键/值到人类可读

嵌套存储在字符串变量中的 JSON 对象

如何将从嵌套 Select 返回的空值转换为空数组?

如何使用 Serde 使用顶级数组反序列化 JSON?

可以通过 POST 使用 EventSource 传递参数的服务器发送事件 (SSE)

如何从 JSON 对象中获取日期

Retrofit 2.0 如何解析嵌套的 JSON 对象?

json和空数组

将 PHP 结果数组转换为 JSON

可以在 SharedPreferences 中保存 JSON 数组吗?

从 JSON 到 JSONL 的 Python 转换