nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观。由于查看文档篇幅过长,不便于迅速阅读抓重点。而且,所举例的某些用法实践上其实比较少用到,而某些实践上常用到的一些用法,官网却缺例子。所以自己简要总结了一下它的主要用法,并加上自己写的示例,希望能给到新接触该库的朋友一些帮助。

下载使用方法

下载地址:

https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp

这是一个单独的C++头文件,所有的代码都在这个头文件里,实现代码都是内联实现,因此,只需要在CPP文件里包含这一个头文件即可。

引入头文件

#include "nlohmann/json.hpp"
using json = nlohmann::json;

使用示例:

1、声明与构造

json j1;
json j2 = json::object();
json j3 = json::array();std::cout << j1.type_name() << std::endl; // output: null
std::cout << j2.type_name() << std::endl; // output: object
std::cout << j3.type_name() << std::endl; // output: array

2、内容构造

json j = R"({"name": "Judd Trump","credits": 1754500,"ranking": 1}
)"_json;//或者
json j{{ "name", "Judd Trump"},{ "credits", 1754500 },{ "ranking", 1}
};

3、解析与序列化

//解析
std::string s = R"({"name": "Judd Trump","credits": 1754500,"ranking": 1})";
auto j = json::parse(s);//序列化
std::string str = j.dump();

4、解析文件

假设一个JS文本文件 c:\test.json 内容如下:

[{"name": "Judd Trump","credits": 1754500,"ranking": 1},{"name": "Neil Robertson","credits": 1040500,"ranking": 2},{"name": "Ronnie O'Sullivan","credits": 954500,"ranking": 3}
]

则解析的代码如下:

json j;
std::ifstream("c:\\test.json") >> j;

5、将JSON对象存为文件

json j;
std::ofstream("d:\\rankings.json") << j;

6、修改JSON对象

json j{{ "name", "Judd Trump"},{ "credits", 1754500 },{"ranking", 1}};std::cout << j << endl;j["name"] = "Wang Daniu"; //j.at("name") = "Wang Daniu";std::cout << j << endl;

输出结果:

{"credits":1754500,"name":"Judd Trump","ranking":1}
{"credits":1754500,"name":"Ding Junhui","ranking":1}

7、与C++对象互相转换

struct Player{string name;int credits;int ranking;
};//1.重载转换函数
void to_json(nlohmann::json& j, const Player& p) {j = json{  {"name", p.name}, {"credits", p.credits}, {"ranking", p.ranking} };
}void from_json(const nlohmann::json& j, Player& p) {j.at("name").get_to(p.name);j.at("credits").get_to(p.credits);j.at("ranking").get_to(p.ranking);
}//2.示例
auto j = R"([{"name": "Judd Trump","credits": 1754500,"ranking": 1},{"name": "Neil Robertson","credits": 1040500,"ranking": 2},{"name": "Ronnie O'Sullivan","credits": 954500,"ranking": 3}    ])"_json; std::vector<Player> players = j.get<std::vector<Player>>();std::cout << "name:    " << players[2].name << std::endl;
std::cout << "credits: " << players[2].credits << std::endl;
std::cout << "ranking: " << players[2].ranking << std::endl;

nlohmann/json 的用法示例相关推荐

  1. C++ nlohmann/json 的主要用法

    文章目录 前言 准备工作 引用头文件: 主要用法: 一.声明与构造 1 纯粹声明 2 内容构造 二.解析与序列化 字符串 解析 序列化 文件:// 比如有文件 c:\rankings.json,其内容 ...

  2. C++ nlohmann/json 的主要用法(cout、printf打印,异常try...catch处理)

    文章目录 前言 准备工作 引用头文件: 主要用法: 一.声明与构造 1 纯粹声明 2 内容构造 二.解析与序列化 字符串 解析 序列化 文件:// 比如有文件 c:\rankings.json,其内容 ...

  3. nlohmann json用法

    nlohmann json用法 介绍 demo 介绍 一个开源的c++ json库,类似于STL,挺好用的 demo nlohmann::json j; j["x"] = 1; j ...

  4. nlohmann/json使用笔记

    nlohmann/json是一个用于解析json的开源C++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选. #include "nlohmann/jso ...

  5. C++ 之 nlohmann::json 一个不错的json库

    前言 最近在搞一个C++项目,用到了json和类的相互转化.但是c++没有反射,也没有像java一个方便的插件,没法办只能自己搞一个了.网上找了一下,发现nlohmann::json不错.已经运用到实 ...

  6. 【C++】C++库nlohmann / json的使用

    nlohmann / json for Modern C++ 前言 一.nlohmann/json库简述 1. 概述 2. 优点 3. 配置 二.nlohmann/json库的基本操作 1. 读取 / ...

  7. python线程池wait_python线程池 ThreadPoolExecutor 的用法示例

    前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...

  8. c++中nlohmann json的使用

    文章目录 一.json.hpp库下载及安装 1.1 开源地址及引入方法 1.2 demo程序测试 二.nlohmann json基本操作 2.1 由basic value创建json 2.2 由jso ...

  9. Go基础系列:双层channel用法示例

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...

最新文章

  1. Seurat包分析单细胞转录组数据代码
  2. FPGA的历史、现状和未来
  3. iOS培训教程——设置默认语言
  4. UITextField的总结
  5. LeetCode第 3 场双周赛(2019.6.29)第一题:小于 K 的两数之和
  6. 不是你无法入门自然语言处理,而是你没找到正确的打开方式
  7. 使用nginx代理,怎么获取真实的IP
  8. CentOS7 源码编译安装Redis shell脚本
  9. cassandra可视化工具_耗时1个月整理!160种Python标准库、第三方库和外部工具都有了...
  10. PHP 几个常用的加密函数
  11. mysql之批量删除
  12. Word2Vec与文章相似度
  13. 使用git上传代码遇到关于remote: Support for password authentication was removed on August 13, 2021.的问题
  14. 联想蓝牙没有连接的地方计算机,联想笔记本连不上蓝牙怎么办 笔记本连接蓝牙耳机没声音解决方法...
  15. video标签设计vue视频播放器组件
  16. 腾讯云https证书部署nginx
  17. pythonfillcolor填充不了颜色_如何在matplotlib 2.0中仅使用图案填充(无背景色)填充区域...
  18. TensorFlow搭建CNN实现时间序列预测(风速预测)
  19. 2022上半年系统分析师必考知识点
  20. 关于合成大西瓜的随笔

热门文章

  1. html 鼠标经过弹性flash导航代码,flash鼠标经过代码
  2. matlab两轮自平衡小车,Simulink仿真
  3. 人脸爬取(人脸数据集的搜集)
  4. Fundamentals of Computer Graphics, Fourth Edition 中文翻译
  5. 麻将打牌有三不打,记住了就不会亏!
  6. 机器学习---有监督和无监督
  7. Hadoop集群之HDFS伪分布式安装 HA(二)
  8. 360路由上线:周红衣和他的小盒子们
  9. WPF控件库:图片按钮的封装
  10. 截图自动添加水印(macOS/windows)