IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> nlohmann/json -> 正文阅读

[C++知识库]nlohmann/json

json

https://github.com/nlohmann/json

官网仓库的test/src下边有很多例子可以参考,比如构造,解析等

说明

可以和 python,golang 的 json 库媲美了。
官网也支持单头文件的形式,坐标:官方仓库 single_include/nlohmann/json.hpp

用法

头文件

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

声明

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

构造

json j{
    { "name", "Judd Trump"},
    { "credits", 1754500 },
    { "ranking", 1}
};

解析及序列号

std::string s = R"(
{
    "name": "Judd Trump",
    "credits": 1754500,
    "ranking": 1
}
)";
auto j = json::parse(s);
std::string s = j.dump();

读写文件

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;   //  {"credits":1754500,"name":"Judd Trump","ranking":1}
 j["name"] = "Ding Junhui";
 std::cout << j << endl;   //  {"credits":1754500,"name":"Ding Junhui","ranking":1}

//字典中查找key是否存在
auto subjectIdIter = j.find("name");
if (subjectIdIter != j.end()){
    cout << "it is found" << endl;
}else{
    cout << "not found " << endl;
}
//如果确定存在,直接可以访问. 直接访问如果不存在会触发抛出异常
std::cout<< j["name"] <<std::endl;

结构体和json互转

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

参考链接

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 10:52:59  更:2021-12-10 10:53:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码