问题标签 [nlohmann-json]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
205 浏览

parsing - 解析json源时如何查看是哪一行导致了异常?

我有数百行的 JSON 文件,但是当出现导致解析异常的错误时,库会返回字符位置,而不是行号。

行号将非常有用,因为大多数文本编辑器都会向您显示或带您到行号,但我不知道有任何给出绝对字符号的。

我在 parse_error 中找到了反序列化成员 byte_ 保存字符索引的位置,但它似乎没有行号信息。

json 容器是否“知道”它是哪一行,我可以在异常处理程序中询问它吗?我知道这不是一个微不足道的问题,因为不同的操作系统给了我们不同 EOL 的“乐趣”,但也许它已经被处理了?

0 投票
1 回答
2002 浏览

c++ - nlohmann 在不知道密钥的情况下解析 json 文件

我正在使用 nlohmann/json 库在 cpp 中使用 json。我有一个 Json::Value 对象,我想通过在不知道键的情况下探索键来浏览我的 json 数据。我遇到了文档,但只找到了object["mySuperKey"]探索数据的方法,这意味着知道现有的密钥。

你能给我一些建议吗?

谢谢。

0 投票
1 回答
2401 浏览

c++ - 在 C++ 中打开 json 文件时遇到问题

我正在尝试打开一个我将在 C++ 中使用的 json 文件。我之前成功使用的代码无法打开文件。我在 Windows 10 Pro 上使用 Visual Studio 2017 和现代 C++ 版本 3.5.0 的 JSON。

我有一个非常简单的函数,它应该打开一个文件作为 json 对象的输入。它似乎打开了文件,但在将其写入 json 对象时中止。最初要打开的文件位于另一个目录中,但我在测试时将它移到了与可执行文件相同的目录中......但这没有帮助。

这是失败的非常短的功能:

这似乎与 nlohmann 网站上的示例基本相同:

我只是希望这会打开 json 文件,将其加载到对象中,然后返回对象。相反,它只是退出。

感谢您的任何想法...即,我做错了什么?(我会忽略它之前的工作......也许我错过了一些东西)。

--铝

根据要求,这是一个最小的可重现示例,但它需要 nlohmann 的 json.hpp 才能编译:

我用这个 json 文件对其进行了测试:

当我运行它时,将上面的 json 作为 data.json 传递,我得到以下输出,然后退出:

没有尝试,它就退出了。它永远不会过去inFileJSON >> baseJObject;

另一个似乎有效的尝试,但为什么呢?

好的。我用相同的 main 尝试了这个(唯一的变化是在函数中):

这在我看来基本相同。我尝试在原始文件和这个文件中都使用 ifstream inFileJSON(fileName.c_str()) 。原来的继续失败,这个继续工作。对不起,这太长了,但我无法从评论中得到体面的格式......我应该试着回答我自己的问题吗?

0 投票
1 回答
1883 浏览

c++ - 如何使用 nlohmann c++ 删除嵌套的 json 数据

我有一个下面的 json 数据。我在. _C++

在上面的 json 数据中,在里面Tags,我们有数据在ROIId哪里Default。我想删除它,使数据变为:

我怎么能在 C++ 中做到这一点。谢谢

0 投票
1 回答
9491 浏览

c++ - 由于某种原因,我的代码中出现了 [json.exception.type_error.302] 。我知道错误是什么意思,但我不知道哪里有问题

我的代码遍历 JSON 文件中每个样本的值,并给出排序比较的次数、内存量以及排序发生所需的时间。但由于某种原因,代码给我一个错误。如果有人可以帮助我,我会很高兴。由于某种原因,我的代码中出现了 [json.exception.type_error.302] 。我知道错误是什么意思,但我不知道哪里有问题

确切地说,这是我得到的错误 - “libc++abi.dylib: terminating with uncaught exception of type nlohmann::detail::type_error: [json.exception.type_error.302] 类型必须是数字,但是一片空白”

0 投票
0 回答
769 浏览

c++ - 为什么我会收到无效的 UTF8 错误?

我正在尝试将 JSON 从 C++ 代码发送到在 Java 上运行的 REST 服务。我正在使用 Visaul Studio 2019、nlohmann/json 库来序列化我的对象并使用 libcurl 来发出 HTTP 请求。

我有一个要序列化的以下对象:

我使用这个 LogType 来填充 AliveLog 的一些成员(非常类似于 Java 枚举)。我使用以下内容对其进行序列化:

当我调用这个函数时,我得到一堆问号和 ½ 的“Çevrimdışı”应该在哪里。

我的 REST 服务也抛出异常 JSON parse error: Invalid UTF-8 middle byte 0xdd;

我尝试为编译器命令行选项设置 /utf8 和 /validate-charset 但无济于事。

如果我只使用不带参数的 j.dump() ,它会抛出一个异常“type_error.316 如果存储在 JSON 值中的字符串不是 UTF-8 编码的”。在我的文本编辑器中,我选择了“自动检测不带签名的 UTF-8 编码”。

这段代码用 Java 写得很好,我正在尝试制作它的 C++ 版本。

编辑:添加了有关 LogType 和 AliveLog 的更多信息

0 投票
2 回答
83 浏览

c++ - 在 for 循环的某些迭代中,字符串的长度为 0,而在其他迭代中则为 0

我正在为 C++ 使用nlohmann::json库。我有以下代码。

我希望strlen(mstr)for 循环的所有 100 次迭代的输出完全相同。

在某些运行中,我得到了预期的输出。

223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 253 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 253程序以退出代码结束:0

但在其他运行中,我偶尔会看到字符串的长度为 0。

223 0 223 223 223 223 223 223 223 223 223 0 223 223 223 223 223 0 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 0 223 223 223 223 223 223 223 223 0 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 253程序以退出代码结束:0

这怎么可能发生?

0 投票
0 回答
369 浏览

c++ - 如何将补丁多级 json 与 nlohmann 库合并

我有一个路径列表,例如:"blabla/bleble/blibli", "blabla/blibli/bleble" 我已经成功地将一个路径转换为:{"blabla":{"bleble":{"blibli":null}}}使用此功能:

但现在我想合并它,它不起作用。我试过了:

结果没用,就像合并什么都没做一样,我尝试了 nlohmann::json 库的 merge_patch 方法,但它完成了一半的工作:

预期结果:

你知道是否可以合并完整的 json 吗?

这是整个代码:https ://pastebin.com/Qyc8EQN0

0 投票
1 回答
1019 浏览

visual-studio-2019 - 使 nlohmann json 库在 Visual Studio 19 中工作的基本问题

我是新手。我知道我在做一些愚蠢的事情。我在最后一天搜索了这个和其他论坛,但我被困住了。我正在尝试使用 nlohmann 的 json 库。我收到了超过 200 条错误消息,其中大部分似乎是因为编译器在主 json.hpp 文件中看不到标头引用,但可以看到 json.hpp 文件。

我已将 nlohmann 库内容复制到源文件夹中,这是目前的代码:

我试图尽量减少我必须追逐的变量数量。

VS 正在查找 json.hpp 文件(一旦我最终拼写正确,就没有波浪线下划线,以及解决方案资源管理器中 json.hpp 和 nlohmann 下的一堆东西)它似乎也看到了 nlohmann 的子目录

nlohmann:: 之后的 'json' 有一个波浪形的下划线;弹出窗口说:命名空间'nlohmann'没有成员'json'

前 20 条左右 211 (!) 错误消息是代码 E1696 '无法打开源文件',指向来自 json.hpp 的明显引用,例如:“E1696 无法打开源文件“nlohmann/adl_serializer.hpp” json5 C:\Users \Rich\source\repos\json5\json5\nlohmann\json.hpp"

我已将“nlohmann”目录添加到编译器查找的包含目录(项目|属性|C/C++|附加包含目录) - 错误消息计数没有变化。我需要手动添加所有子目录吗?

0 投票
0 回答
481 浏览

c++ - 读/写 BSON 文件

我正在使用https://github.com/nlohmann/json库将我的对象写入 BSON。我已经json通过将文件写入 json 以供审查来验证创建实例,因此该部分代码按预期工作。不过,一旦我换回 bson,我就会遇到问题。

这是我正在使用的代码片段:

我得到一个例外,上面写着:

json::from_bson(v_bson )如果我称它为解析良好,那也值得注意。我验证了正在读取的数组大小与我写出的向量大小相同。bson所以这让我相信我在最初写出来的时候做错了什么。


编辑
使用一些在线工具将我生成的 bson 文件转换为 json 似乎写作是正确的。所以这表明我的读取功能是问题所在。

再做一些调试,看起来v_bson vector第 3 项中的值'\0'我认为会让读者失望,并且在阅读整个文件之前就停止了。我通过检查的大小确认了这一点memblock,它只有 3 个字符长。

所以问题发生了一点变化:
我如何告诉ifstream读者忽略它似乎认为是 EOF 字符的内容?

我发现的所有内容都说要确保用 初始化它std::ios::binary,我这样做: