文章目录

  • 前言
  • 准备工作
  • 引用头文件:
  • 主要用法:
    • 一、声明与构造
      • 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 的主要用法相关推荐

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

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

  2. nlohmann/json使用笔记

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

  3. nlohmann json用法

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

  4. nlohmann/json 的用法示例

    nlohmann/json 是一个C++实现的JSON解析器,使用非常方便直观.由于查看文档篇幅过长,不便于迅速阅读抓重点.而且,所举例的某些用法实践上其实比较少用到,而某些实践上常用到的一些用法,官 ...

  5. c++中nlohmann json的使用

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

  6. json解析数组 nlohmann_nlohmann/json 的主要用法

    前言 nlohmann/json是一个用于解析json的开源c++库,口碑一流,号称有业界最好的性能,并且使用非常方便直观,是很多c++程序员的首选.开源官网处有详细说明用法,但篇幅过长,不便于迅速阅 ...

  7. c++11:nlohmann::json进阶使用(三)使用basic_json模板类

    nlohmann::json是非常好用的一个json开源解析库.nlohmann/json的源码是基于C++11标准写的,整个源码就是一个文件 nlohmann/json.hpp,引用非常方便. 关于 ...

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

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

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

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

最新文章

  1. 如何超越console.log并充分利用浏览器的调试控制台
  2. 你真的了解For循环吗?一道For循环Java面试题引发的思考
  3. Apache Mahout 简介
  4. error while loading shared libraries: libopencv_core.so.3.4: cannot open 报错解决方法
  5. difference between JSON Model and client model
  6. JAVA进阶day08泛型
  7. pytest测试框架(二)---fixture介绍
  8. 10的28次方C语言,c语言编程测定28的28次方有多少位
  9. Java 开发项目管理工具
  10. 微信小程序云数据库增删改查
  11. WICC | 为什么说中国「泛娱乐」出海绕不开这家公司
  12. 分享一个返利系统源码,前端uni+后端php开发的影票返利系统源码
  13. ylinux系统找到软件_你的 linux 上都有什么值得推荐的软件?
  14. 声纹技术(三):声纹识别技术
  15. 【ESD专题】ESD和EOS有什么差异?
  16. RESTful接口介绍与实现
  17. ios开发之autolayout 第三方框架Masonry
  18. 网络传真服务器位置,怎么设置传真服务器
  19. 前端架构带你 封装axios,一次封装终身受益「美团后端连连点赞」
  20. Linux第八课samba服务器搭载

热门文章

  1. 利用Cobbler批量快速网络安装CentOS
  2. 【备忘录】BADI_ACC_DOCUMENT增强实现
  3. 互联网经济与实体经济
  4. 记Redis那坑人的HGETALL
  5. 你有多了解hybris ?
  6. 销售订单屏幕增强及功能增强
  7. SAP删除会计科目 OBR2
  8. SAP-ABAP程序发送邮件
  9. 小心,疫情下在线教育免费试听引起的“后遗症”
  10. linux keepalived 脚本,Linux下 keepalived 的安装和配置