C++ nlohmann/json 的主要用法
文章目录
- 前言
- 准备工作
- 引用头文件:
- 主要用法:
- 一、声明与构造
- 1 纯粹声明
- 2 内容构造
- 二、解析与序列化
- 字符串
- 解析
- 序列化
- 文件:// 比如有文件 c:\rankings.json,其内容如下
- 解析
- 序列化
- 三、引用和修改
- 四、转换成C++对象
- 定义对象类型
- 重载转换函数
- 转换示例
- 输出结果
前言
nlohmann/json 是一个用于解析json的开源c++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选。开源官网处有详细说明用法,但篇幅过长,不便于迅速阅读抓重点。而且,所举例的某些用法实践上其实比较少用到,而某些实践上常用到的一些用法,官网却缺例子。所以自己简要总结了一下它的主要用法,并加上自己写的示例,希望能给到新接触该库的朋友一些帮助。
准备工作
下载 https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp, 并加入本地工程
我不知道怎么直接下载这个文件,用的拷贝这个文件内容然后自己新建文件的方法
引用头文件:
#include "nlohmann/json.hpp"
using json = nlohmann::json;
主要用法:
一、声明与构造
1 纯粹声明
#include "include/nlohmann/json.hpp"
using json = nlohmann::json;
#include <iostream>int main() {json j1;json j2 = json::object();json j3 = json::array();std::cout << j1.type_name() << std::endl; // output: nullstd::cout << j2.type_name() << std::endl; // output: objectstd::cout << j3.type_name() << std::endl; // output: arrayreturn 0;
}
2 内容构造
#include "include/nlohmann/json.hpp"
using json = nlohmann::json;
#include <iostream>int main() {json j1 = R"({"name": "Judd Trump","credits": 1754500,"ranking": 1})"_json;json j2{{ "name", "Judd Trump"},{ "credits", 1754500 },{ "ranking", 1}};std::cout << j1.type_name() << std::endl; //objectstd::cout << j2.type_name() << std::endl; //objectreturn 0;
}
二、解析与序列化
字符串
解析
std::string s = R"(
{"name": "Judd Trump","credits": 1754500,"ranking": 1
}
)";
auto j = json::parse(s);
序列化
std::string s = j.dump();
文件:// 比如有文件 c:\rankings.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:\\rankings.json") >> j;
序列化
std::ofstream("d:\\rankings.json") << j;
三、引用和修改
举个栗子:
json j{{ "name", "Judd Trump"},{ "credits", 1754500 },{ "ranking", 1}};std::cout << j << endl;j["name"] = "Ding Junhui"; //j.at("name") = "Ding Junhui"; std::cout << j << endl;
输出结果:
{"credits":1754500,"name":"Judd Trump","ranking":1}
{"credits":1754500,"name":"Ding Junhui","ranking":1}
四、转换成C++对象
定义对象类型
struct Player{string name;int credits;int ranking;
};
重载转换函数
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);
}
转换示例
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;
输出结果
name: Ronnie O'Sullivan
credits: 954500
ranking: 3
参考文章:nlohmann/json 的主要用法
C++ nlohmann/json 的主要用法相关推荐
- C++ nlohmann/json 的主要用法(cout、printf打印,异常try...catch处理)
文章目录 前言 准备工作 引用头文件: 主要用法: 一.声明与构造 1 纯粹声明 2 内容构造 二.解析与序列化 字符串 解析 序列化 文件:// 比如有文件 c:\rankings.json,其内容 ...
- nlohmann/json使用笔记
nlohmann/json是一个用于解析json的开源C++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选. #include "nlohmann/jso ...
- nlohmann json用法
nlohmann json用法 介绍 demo 介绍 一个开源的c++ json库,类似于STL,挺好用的 demo nlohmann::json j; j["x"] = 1; j ...
- nlohmann/json 的用法示例
nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观.由于查看文档篇幅过长,不便于迅速阅读抓重点.而且,所举例的某些用法实践上其实比较少用到,而某些实践上常用到的一些用法,官 ...
- c++中nlohmann json的使用
文章目录 一.json.hpp库下载及安装 1.1 开源地址及引入方法 1.2 demo程序测试 二.nlohmann json基本操作 2.1 由basic value创建json 2.2 由jso ...
- json解析数组 nlohmann_nlohmann/json 的主要用法
前言 nlohmann/json是一个用于解析json的开源c++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选.开源官网处有详细说明用法,但篇幅过长,不便于迅速阅 ...
- c++11:nlohmann::json进阶使用(三)使用basic_json模板类
nlohmann::json是非常好用的一个json开源解析库.nlohmann/json的源码是基于C++11标准写的,整个源码就是一个文件 nlohmann/json.hpp,引用非常方便. 关于 ...
- C++ 之 nlohmann::json 一个不错的json库
前言 最近在搞一个C++项目,用到了json和类的相互转化.但是c++没有反射,也没有像java一个方便的插件,没法办只能自己搞一个了.网上找了一下,发现nlohmann::json不错.已经运用到实 ...
- 【C++】C++库nlohmann / json的使用
nlohmann / json for Modern C++ 前言 一.nlohmann/json库简述 1. 概述 2. 优点 3. 配置 二.nlohmann/json库的基本操作 1. 读取 / ...
最新文章
- 如何超越console.log并充分利用浏览器的调试控制台
- 你真的了解For循环吗?一道For循环Java面试题引发的思考
- Apache Mahout 简介
- error while loading shared libraries: libopencv_core.so.3.4: cannot open 报错解决方法
- difference between JSON Model and client model
- JAVA进阶day08泛型
- pytest测试框架(二)---fixture介绍
- 10的28次方C语言,c语言编程测定28的28次方有多少位
- Java 开发项目管理工具
- 微信小程序云数据库增删改查
- WICC | 为什么说中国「泛娱乐」出海绕不开这家公司
- 分享一个返利系统源码,前端uni+后端php开发的影票返利系统源码
- ylinux系统找到软件_你的 linux 上都有什么值得推荐的软件?
- 声纹技术(三):声纹识别技术
- 【ESD专题】ESD和EOS有什么差异?
- RESTful接口介绍与实现
- ios开发之autolayout 第三方框架Masonry
- 网络传真服务器位置,怎么设置传真服务器
- 前端架构带你 封装axios,一次封装终身受益「美团后端连连点赞」
- Linux第八课samba服务器搭载