日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ nlohmann/json 的主要用法

發(fā)布時(shí)間:2025/3/20 c/c++ 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ nlohmann/json 的主要用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 前言
    • 準(zhǔn)備工作
    • 引用頭文件:
    • 主要用法:
      • 一、聲明與構(gòu)造
        • 1 純粹聲明
        • 2 內(nèi)容構(gòu)造
      • 二、解析與序列化
        • 字符串
          • 解析
          • 序列化
        • 文件:// 比如有文件 c:\rankings.json,其內(nèi)容如下
          • 解析
          • 序列化
      • 三、引用和修改
      • 四、轉(zhuǎn)換成C++對象
        • 定義對象類型
        • 重載轉(zhuǎn)換函數(shù)
        • 轉(zhuǎn)換示例
        • 輸出結(jié)果

前言

nlohmann/json 是一個(gè)用于解析json的開源c++庫,口碑一流,號稱有業(yè)界最好的性能,并且使用非常方便直觀,是很多c++程序員的首選。開源官網(wǎng)處有詳細(xì)說明用法,但篇幅過長,不便于迅速閱讀抓重點(diǎn)。而且,所舉例的某些用法實(shí)踐上其實(shí)比較少用到,而某些實(shí)踐上常用到的一些用法,官網(wǎng)卻缺例子。所以自己簡要總結(jié)了一下它的主要用法,并加上自己寫的示例,希望能給到新接觸該庫的朋友一些幫助。

準(zhǔn)備工作

下載 https://github.com/nlohmann/json/tree/develop/single_include/nlohmann/json.hpp, 并加入本地工程

我不知道怎么直接下載這個(gè)文件,用的拷貝這個(gè)文件內(nèi)容然后自己新建文件的方法

引用頭文件:

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

主要用法:

一、聲明與構(gòu)造

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 內(nèi)容構(gòu)造

#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,其內(nèi)容如下

[{"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;

三、引用和修改

舉個(gè)栗子:

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;

輸出結(jié)果:

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

四、轉(zhuǎn)換成C++對象

定義對象類型

struct Player{string name;int credits;int ranking; };

重載轉(zhuǎn)換函數(shù)

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); }

轉(zhuǎn)換示例

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;

輸出結(jié)果

name: Ronnie O'Sullivan credits: 954500 ranking: 3

參考文章:nlohmann/json 的主要用法

總結(jié)

以上是生活随笔為你收集整理的C++ nlohmann/json 的主要用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。