JSON for Modern C++ 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
JSON for Modern C++ 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
JSON for Modern C++ 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 C/C++ 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者
适用人群 未知
收录时间 2017-12-17

软件简介

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。

具有以下特点

  • 直观的语法

  • 整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便

  • 使用 C++ 11 标准编写

  • 使用 json 像使用 STL 容器一样

  • STL 和 json 容器之间可以相互转换

  • 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为。此外,还检查了 Valgrind 是否有内存泄漏。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践

示例代码

假设要创建如下的 JSON 对象

{
  "pi": 3.141,
  "happy": true,
  "name": "Niels",
  "nothing": null,
  "answer": {
    "everything": 42
  },
  "list": [1, 0, 2],
  "object": {
    "currency": "USD",
    "value": 42.99
  }
}

使用这个 JSON 库,可以这样写

// create an empty structure (null)
json j;

// add a number that is stored as double (note the implicit conversion of j to an object)
j["pi"] = 3.141;

// add a Boolean that is stored as bool
j["happy"] = true;

// add a string that is stored as std::string
j["name"] = "Niels";

// add another null object by passing nullptr
j["nothing"] = nullptr;

// add an object inside the object
j["answer"]["everything"] = 42;

// add an array that is stored as std::vector (using an initializer list)
j["list"] = { 1, 0, 2 };

// add another object (using an initializer list of pairs)
j["object"] = { {"currency", "USD"}, {"value", 42.99} };

// instead, you could also write (which looks very similar to the JSON above)
json j2 = {
  {"pi", 3.141},
  {"happy", true},
  {"name", "Niels"},
  {"nothing", nullptr},
  {"answer", {
    {"everything", 42}
  }},
  {"list", {1, 0, 2}},
  {"object", {
    {"currency", "USD"},
    {"value", 42.99}
  }}
};

请注意,在所有上述情况下,不需要“告诉”编译器要使用哪个 JSON 值。如果想要明确或表达一些边缘的情况,可以使用 json::array 和 json::object

// a way to express the empty array []
json empty_array_explicit = json::array();

// ways to express the empty object {}
json empty_object_implicit = json({});
json empty_object_explicit = json::object();

// a way to express an _array_ of key/value pairs [["currency", "USD"], ["value", 42.99]]
json array_not_object = json::array({ {"currency", "USD"}, {"value", 42.99} });
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(2) 发布并加入讨论🔥
发表了资讯
2022/08/16 07:04

JSON for Modern C++ 3.11.2 发布,现代 C++ 的 JSON 库

JSON for Modern C++ 3.11.2 现已发布,修复了 3.11.1 版本中的一些错误。此外,库的结构也已经过重组;所有的改变都是向后兼容的。 具体更新内容包括: Bug 修复 修复在 3.11.0 版本中valuefunction 因字符串、大小类型和nullptr而损坏的问题。#3652 #3655 #3663 修复 json_fwd.hpp header 使其 self-contained,并将其加入到 single-header release 中#3656 #3679 #3687 修复在关联容器中用json_pointer作为 key 的回归。#36...

0
3
发表了资讯
2022/08/09 07:01

JSON for Modern C++ 3.11.1 发布,现代 C++ 的 JSON 库

JSON for Modern C++ 3.11.1 现已发布,具体更新内容包括: Known issues #3652 Regression:对 member function“value”的调用不明确 #3654 Regression:比较 json_pointer 和 const char */string_t 的'operator!='不匹配 #3655 Regression:.value<size_t> 存在编译错误 所有问题都在分支中得到修复,并将成为 3.11.2 版本的一部分。 Summary 版本 3.11.0 将 user-defined string literals (UDL) 移至命名空间nlohmann::lit...

1
5
发表了资讯
2022/01/05 07:06

JSON for Modern C++ 3.10.5 发布,现代 C++ 的 JSON 库

JSON for Modern C++ 3.10.5 发布了,它在 C++ 下使用的 JSON 库。 去年 10 月的 3.10.4 版本引入了将 std::filesystem 对象和 JSON 相互转换的功能支持,当时是假设任何支持 C++17 的编译器都会有适当的文件系统支持,但现在看来并非如此。因此在最新的 3.10.5 版本引入了预处理器检查(以及对应方法),确保在检测到编译器支持此功能时才编译转换。 完整更新内容如下: Bug 修复 确保仅在编译器支持时才使用 C++17 文件系统转...

0
4
发表了资讯
2021/10/20 07:01

JSON for Modern C++ 3.10.4 发布,主要修复 3.10.0 版本 bug

JSON for Modern C++ 3.10.4 发布了,主要修复了 3.10.0 版本带来的两个 bug ,此次的更新内容均向后兼容。 修复 bug 修复版本 3.10.0 中引入的回归错误,这个错误导致了:带默认参数的显式构造函数在编译时会报错。 #3077 #3079 修复版本 3.10.0 中引入的回归错误,这个错误导致了:std::find 和 std::remove 的返回值被当成一个指针,在编译时会出错 #3081 #3082 修复 std::filesystem::path 转换 JSON 的问题,在 3.10.3 版本...

1
2
发表了资讯
2021/08/23 07:50

JSON for Modern C++ 3.10.0 发布

JSON for Modern C++ 3.10.0 已发布,这是推出 3.9.1 一年多后的首次更新。此版本增加了一些新功能、引入许多小的变化和修复错误。 其中值得注意的变化是增加了扩展的诊断功能,通过在引入json.hpp之前定义JSON_DIAGNOSTICS,JSON 指针会被添加到异常中,这有助于调试对象访问、数组索引或类型不匹配的问题。 另一个重要变化是增加完全超负荷工作的 CI,它会对每次 commit 执行大量检查,支持将来更频繁地发布新版本。 新功能 ...

2
5
发表于开发技能专区
2020/08/07 07:35

JSON for Modern C++ 3.9.1 发布

JSON for Modern C++ 3.9.1 发布了,该 JSON 方案特点包括语法直观、易于集成与严格执行测试。 此版本主要修复了 3.9.0 版本中引入的两个功能 bug: 词法分析器不接受两个以上的连续注释,例如 /* one */ /* two */ [] 新引入的ordered_json容器没有实现完整的接口,缺少 JSON 中的某些特性,在调用时会出现问题,比如调用 ordered_json::parse的时候 所有变更都是向后兼容的,详情查看更新说明:https://github.com/nlohmann/j...

0
2
发表于服务端专区
2020/06/15 07:31

JSON for Modern C++ 3.8.0 发布

JSON for Modern C++ 3.8.0 发布了,这是一个特性版本,距离上一次发布已经过去了 6 个多月,也修复了一些问题。 使用二进制值,极大地扩展了对二进制格式的支持,例如 CBOR、BSON 与 MessagePack。通过向 JSON 类添加新的值类型,可以读取和写入二进制值,甚至可以在不同格式之间共享二进制值。 此外,增强了输入适配器,也就是解析器读取输入的方式。现在,该LegacyInputIterator概念支持任何容器,同时可以将性能提高 3-10%...

2
3
发表于开发技能专区
2019/11/19 06:43

JSON for Modern C++ 3.7.3 发布

JSON for Modern C++ 3.7.3 发布了,此版本修复了 3.7.2 版中引入的 bug,该 bug 可能在析构函数调用中产生二次复杂度。 从析构函数中删除了 reserve() 调用,这可能导致二次复杂性。#1837 #1838 所有更改向后兼容。 详情查看更新说明: https://github.com/nlohmann/json/releases/tag/v3.7.3

0
4
发表于软件架构专区
2019/11/11 07:05

JSON for Modern C++ 3.7.2 发布

JSON for Modern C++ 3.7.2 发布了,这是一个 bug 修复版本。 bad_json_parsers 项目测试了 JSON 解析器库如何对深度嵌套的输入做出反应,发现该库在某个嵌套深度处出现段错误。此版本已修复此错误,现在解析仅受可用内存的限制。所有更改都是向后兼容的。 详情查看更新说明: https://github.com/nlohmann/json/releases/tag/v3.7.2...

3
7
2019/11/10 07:13

JSON for Modern C++ 3.7.1 发布

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。3.7.1 版本已经发布,这个版本修复了库中的几个小错误,且更改都是向后兼容的,内容如下: Bug Fixes 修复了序列化 std::int64_t 最小值时的分段错误 修复了 JSON 指针的 contains() 函数 修复 SFINAE 漏洞,无法从 std::pair 和 std::tuple 转换为 json 修复了 UBSAN 检测到的一些回归。更新 CI 以使用 Clang-Tidy 7.1.0 修复 iteration_proxy ...

2
13
发表于开发技能专区
2019/08/01 07:23

JSON for Modern C++ 3.7.0 发布

JSON for Modern C++ 3.7.0 发布了,该 JSON 方案特点包括语法直观、易于集成与严格执行测试。 此版本引入的新特性如下: 添加 contains 函数的重载以检查 JSON 指针是否有效。 添加函数 to_string 以允许常规转换字符串。 为 emplace_back 函数添加返回值,返回对添加元素的引用,C++ 17 在 std::vector 中也有这样的特性。 在 MSYS2 上添加如何用 pacman 包管理器使用库的信息。 此外此版本还带来了一些 bug 修复与功能改进,...

1
12
发表于软件架构专区
2019/03/21 06:55

JSON for Modern C++ 3.6.0 发布

JSON for Modern C++ 3.6.0 发布了,此版本为 JSON 指针添加了一些便利功能,引入了一个 contains 函数来检查键是否存在于对象中,并提高了整型序列化的性能。此外,还带来一些改进与 bug 修复。 所有更改都是向后兼容的。 具体更新内容如下: 新特性 使用 operator/ 和 operator/= 简化了 JSON 指针的创建,可以使用 empty、back 和 parent_pointer 检查 JSON 指针,并使用 push_back 和 pop_back 进行操作。 添加了一个布尔方...

1
8
2018/11/01 07:19

JSON for Modern C++ 3.4.0 发布,C++ JSON 库

JSON for Modern C++ 3.4.0 发布了。JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。 具有以下特点 直观的语法 整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便 使用 C++ 11 标准编写 使用 json 像使用 STL 容器一样 STL 和 json 容器之间可以相互转换 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行为...

9
26
发表于软件架构专区
2018/10/07 07:54

JSON for Modern C++ 3.3.0 发布,C++ JSON 库

JSON for Modern C++ 3.3.0 已发布了。JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。 具有以下特点 直观的语法 整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便 使用 C++ 11 标准编写 使用 json 像使用 STL 容器一样 STL 和 json 容器之间可以相互转换 严谨的测试:所有类都经过严格的单元测试,覆盖了 100% 的代码,包括所有特殊的行...

1
21
发表于AI & 大数据专区
2018/08/25 07:55

JSON for Modern C++ 3.2.0 发布,C++ JSON 库

JSON for Modern C++ 3.2.0 已发布,此版本引入了 SAX 接口。虽然这可能只是少数人使用的一个非常特殊的功能,但它允许统一所有消耗输入并创建某种 JSON 值的函数。 此外,新版支持从宽字符串类型进行解析。这是将库从 UTF-8 向 UTF-16 和 UTF-32 支持的第一步。 部分更新如下 新特性 added a parser with a SAX interface (#971, #1153) support to parse from wide string types std::wstring, std::u16string, and std::u32...

1
10
发表于服务端专区
2018/02/03 07:39

JSON for Modern C++ 3.1.0 正式发布:包含重大变更

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。此版本添加了对UBJSON格式和JSON合并修补程序的支持。它还包含一些小的更改和错误修复。所有更改都是向后兼容的。 更新内容: 新功能 该库现在支持UBJSON(通用二进制JSON规范)作为二进制格式来读写JSON值的空间效率。 JSON合并补丁(RFC 7386)提供了一种直观的方法来描述JSON值之间的补丁(#876,#877) 改进 该库现在使用Grisu2算法来打印...

0
9
发表了资讯
2017/12/18 08:22

JSON for Modern C++ 3.0.0 正式发布:包含重大变更

在将近一年的开发之后,JSON for Modern C++ 终于发布了它的全新版本,这是一个主要的版本。由于坚持语义化,所以该版本会有一些破坏性的变更,建议在更新之前仔细阅读发布说明。此外,还增加了一些新功能,修复了很多错误,并排除了一些不一致之处。 下面接着看一下部分更新的内容。 破坏性的变更 该库现在使用用户定义的异常,而不是重复使用 <stdexcept>(#244)中定义的异常。这不仅可以向异常中添加更多的信息(每个异常现在...

11
35
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
2 评论
102 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部