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} });
最近学习了json for modern c++的使用,在此总结一些常用功能使用方法。 老规矩,还是先简单介绍一下什么是json吧。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Pe
JSON for Modern C++是nlohmann在GitHub上开源的读写json文件的C++库,使用者仅需包含一个json.hpp文件即可。 开源地址为:GitHub - nlohmann/json: JSON for Modern C++ 使用起来比较简单的了,首先从GitHub上将源码下载到本地,使用CMake编译源码(确保勾选了JSON_BuildTests) 在编译工程中找到un
windows下cpp解析json文件暂时找到三种方法:jsoncpp、QJson、json for modern c++ jsoncpp 安装 git clone https://github.com/open-source-parsers/jsoncpp cd jsoncpp mkdir build && cd build cmake .. make 把生成的bin、include、lib目
GitHub开源项的地址:https://github.com/nlohmann/json json for modern c++是一个德国大牛nlohmann写的,有以下特点: 1.直观的语法。 2.整个代码由一个头文件组成json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便。 3.使用c++11标准编写。 4.使用json 像使用STL容器一样。 5.STL和jso
前言 一开始使用jsoncpp,但是jsoncpp已经不更新了,nlohmann还在更新,并且jsoncpp做过一次大的版本升级,导致api不兼容,以前使用过的工程代码不能很好的升级到新的版本,并且jsoncpp是多个文件支持,使用的时候我编译成了lib,nlohmann是一个头文件,更方便。 nlohmann使用c++11的新功能,更多的c++方法,使用起来更方便。并且nlohmann在调试的时
JSON for modern c++ / nlohmann 最近在使用这个c++实现的json库,作者在github上提供了源码,是个开源的c++项目 GitHub开源项的地址:https://github.com/nlohmann/json JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSO
问题内容: 我一直在寻找一套在JSON和XML之间进行转换的例程,但毫无用处。我在Javascript,Java,PHP和Python中找到了这样的例程,但在C或C ++中却找不到。 FWIW,我的json库是json- spirit。我当前正在处理JSON,并希望通过转换层添加XML支持(将传入消息从XML转换为JSON,对其进行处理,将结果转换回XML,然后将其输出)。 有人有指针吗? 我还看
问题内容: 我正在使用返回JSON的API。 我有一个方法调用api,并解析所需节点的JSON响应。 到目前为止,除了最新的JSON响应似乎格式错误之外,其他所有功能都可以正常工作。 其他回复如下: 我使用JObject.Parse按名称带回适当的节点。 最新的JSON响应返回为: 如您所见,没有“名称”,并且JSON稍微无效。 我该如何解析。对于第一个示例,我使用下面的代码,但是现在JSON没有
问题内容: 我正在尝试存储从以下请求中获取的JSON中的JSON … 得到的JSON从获得 的身体 是下面的,正如你可以看到有是JSON内的JSON,我怎么能存储 的是 JSON在 NSDictionary中 ,你可以看到,JSON是引号之间。 问题答案: 实际上,您拥有的是:经典JSON,其中有一个字符串“代表” JSON。 因此,由于我们可以这样做: NSData <=> NSString N
问题内容: 我想将DataTable作为Json格式显示在图表上。 如何将DataTable转换为Json? 谢谢。 问题答案: 您可以使用JSON.NET将数据表(在许多其他类型中!)自动序列化为JSON。
问题内容: 我已经完成了有关iOS中JSON的Raywenderlich教程,但是我很难将其调整为适合自己的JSON文件。这是 我的JSON : 这是 我的代码 : 日志返回。 问题答案: 你这样做是不对的。您已正确将JSON数据填充到字典(名为)中。但你有一个(被称为你的主要内部)和价值的是内部数组。 正确的代码是: 了解概念。这取决于你的内心里有什么。如果它是一个数组(在Values内部),则
问题内容: 我是C#和.NET的新手,但是我编写了此代码来调用存储过程,然后我想获取返回的DataTable并将其转换为JSON。 那么我的问题是最好/最简单的方法是什么?一个例子很好,因为我对此还很陌生。 问题答案: 代替数据表,您应该使用数据读取器。您的代码效率低下,而且有点难以阅读-您可能需要执行以下操作: 然后,您可以使用该信息