C++ 的 JSON 库 JSON for Modern C++

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} });
的码云指数为
超过 的项目
加载中

评论(1)

大连馋师
大连馋师
有没有性能测试报告?

JSON for Modern C++ 3.7.0 发布

JSON for Modern C++ 3.7.0 发布了,该 JSON 方案特点包括语法直观、易于集成与严格执行测试。 此版本引入的新特性如下: 添加 contains 函数的重载以检查 JSON 指针是否有效。 添加函数 to...

08/01 07:23

JSON for Modern C++ 3.6.0 发布

JSON for Modern C++ 3.6.0 发布了,此版本为 JSON 指针添加了一些便利功能,引入了一个 contains 函数来检查键是否存在于对象中,并提高了整型序列化的性能。此外,还带来一些改进与 bug 修...

03/21 06:55

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,没有子...

2018/11/01 07:19

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,没有...

2018/10/07 07:54

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

JSON for Modern C++ 3.2.0 已发布,此版本引入了 SAX 接口。虽然这可能只是少数人使用的一个非常特殊的功能,但它允许统一所有消耗输入并创建某种 JSON 值的函数。 此外,新版支持从宽字符串...

2018/08/25 07:55

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

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++ 下使用的 JSON 库。此版本添加了对UBJSON格式和JSON合并修补程序的支持。它还包含一些小的更改和错误修复。所有更改都是向后兼...

2018/02/03 07:39

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

在将近一年的开发之后,JSON for Modern C++ 终于发布了它的全新版本,这是一个主要的版本。由于坚持语义化,所以该版本会有一些破坏性的变更,建议在更新之前仔细阅读发布说明。此外,还增加...

2017/12/18 08:22

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

C++ 读取JSON配置文件

C++ 读取JSON配置文件 前言 JSON作为当下流行的数据交换语言,其易于人阅读和编写,易于机器解析和生成,以及高效的网络传输效率等特性,使其再互联网、物联网等行业得到了广泛的使用,使用J...

03/16 23:52
442
0
推荐!国外程序员整理的 C++ 资源大全

本文由 伯乐在线 - JingerJoe 翻译自 fffaraz。未经许可,禁止转载! 欢迎加入:翻译小组,通过 翻译频道 贡献一份力量。 关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz 发起和维护。 ...

2014/10/28 08:57
836
2
C++开源库

关于 C++ 框架、库和资源的一些汇总列表

2014/10/10 13:38
379
3
国外程序员整理的 C++ 资源大全

摘要:C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。 关于 C++ 框架、...

07/26 11:32
20
0
站在巨人的肩膀上,C++开源库大全

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++ Standard Library:是一系列类和函...

2014/11/14 09:34
337
0
[C++] 分享国外程序员的 C++开发资源大全

、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Stan...

07/24 16:25
21
0
C++中消息自动派发之三 About JSON Encode

《C++ 消息自动派发》系列上篇介绍了IDL解析器,生成的C++代码只支持JSON转C++ struct。 经过新的重构,这次增加了对C++ struct 转JSON的支持。IDL解析器自动为C++ struct生成两个方法。   ...

2013/11/26 13:47
157
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部