C++ 下使用的 JSON 库 JSON for Modern C++ | 软件推介
Posted OSC开源社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 下使用的 JSON 库 JSON for Modern C++ | 软件推介相关的知识,希望对你有一定的参考价值。
JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。
授权协议:MIT
开发语言:C/C++ 查看源码»
操作系统:跨平台
JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。
具有以下特点
直观的语法
整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便
使用 C++ 11 标准编写
使用 json 像使用 STL 容器一样
STL 和 json 容器之间可以相互转换
严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践
示例代码
假设要创建如下的 JSON 对象
使用这个 JSON 库,可以这样写
请注意,在所有上述情况下,不需要“告诉”编译器要使用哪个 JSON 值。如果想要明确或表达一些边缘的情况,可以使用 json::array 和 json::object
3.0.0 已正式发布,更新内容:
在将近一年的开发之后,JSON for Modern C++ 终于发布了它的全新版本,这是一个主要的版本。由于坚持语义化,所以该版本会有一些破坏性的变更,建议在更新之前仔细阅读发布说明。此外,还增加了一些新功能,修复了很多错误,并排除了一些不一致之处。
下面接着看一下部分更新的内容。
破坏性的变更
该库现在使用用户定义的异常,而不是重复使用 <stdexcept>(#244)中定义的异常。这不仅可以向异常中添加更多的信息(每个异常现在都有一个标识符,解析错误包含错误的位置),而且还可以轻松捕获所有的异常catch(json::exception)
当使用与 UTF-8 不同编码的字符串在 JSON 中进行值存储时,由于仅支持 UTF-8,所以它们的序列化不能被库本身解析。为了强制实现这个库的限制并提高一致性,在序列化过程中,非 UTF-8 编码的字符串现在会产生一个 json::type_error 异常 (#838)。UTF-8 的有效性检验是通过 Björn Hoehrmann 的代码实现的
NaN 和 infinity 值现在可以存储在 JSON 值内而不会引发异常。但是,它们仍然是序列化的 null (#388)
该库的迭代器标签已从RandomAccessIterator更改为 BidirectionalIterator (#593)
该库现在没有包括标准的头文件 <iostream>, <ctype> 和 <stdexcept> 等等。您可能需要将这些头文件添加到依赖它们的代码中
已删除2.0.0 版中已弃用的构造函数 explicit basic_json(std::istream& i, const parser_callback_t cb = nullptr) (#480)
关于已弃用的功能、新增特性、更多的变更、以及迁移指南,请参阅发布说明:
https://github.com/nlohmann/json/releases/tag/v3.0.0
以上是关于C++ 下使用的 JSON 库 JSON for Modern C++ | 软件推介的主要内容,如果未能解决你的问题,请参考以下文章
最好用的json库,也许是JSON for modern C++ 的最佳实践!解决nlohmann json中文无法解析的问题!