当前位置: 首页 > wzjs >正文

抖音平台建站工具三亚的私人电影院

抖音平台建站工具,三亚的私人电影院,医药建设网站,ps做网站素材文件打包文章目录 1 nlohmann/json库说明2 nlohmann/json特点3 nlohmann/json库的使用方法3.1 引入头文件3.2 解析JSON字符串3.3 访问JSON数据3.4 生成JSON对象3.5 修改JSON数据3.6 将JSON写入文件3.7 遍历JSON对象 4 代码示例4.1 定义JSON数值类型4.2 从STL容器转换到json4.3 string序…

文章目录

  • 1 nlohmann/json库说明
  • 2 nlohmann/json特点
  • 3 nlohmann/json库的使用方法
    • 3.1 引入头文件
    • 3.2 解析JSON字符串
    • 3.3 访问JSON数据
    • 3.4 生成JSON对象
    • 3.5 修改JSON数据
    • 3.6 将JSON写入文件
    • 3.7 遍历JSON对象
  • 4 代码示例
    • 4.1 定义JSON数值类型
    • 4.2 从STL容器转换到json
    • 4.3 string序列化和反序列化及JSON格式和C++对象之间转换
    • 4.4 stream的序列化和反序列化
    • 4.5 任意类型转换
  • 5 总结

1 nlohmann/json库说明

在现代软件开发中,JSON(JavaScript Object Notation)已经成为数据交换和存储的标配格式。C++作为一种高效且广泛使用的编程语言,在处理JSON数据时也需要一个强大且易用的库。nlohmann/json库正是这样一个选择,该库提供了丰富的API,使得在C++项目中处理JSON数据变得极为简单和高效。本文主要说明nlohmann/json库的特点、使用方法以及一些代码示例。

2 nlohmann/json特点

  1. 轻量级:nlohmann/json是一个单头文件库,只需将一个头文件引入项目即可使用。不需要链接额外的库文件,使用时非常方便;
  2. 简单易用:nlohmann/json库的接口设计非常直观,与C++ STL风格非常接近。提供了类似于STL容器的API,可以方便地处理JSON数据。同时,还支持多种数据类型,包括字符串、数字、布尔值、数组和对象等。能够轻松地进行序列化和反序列化操作;
  3. 功能强大:nlohmann/json库支持从JSON格式到C++标准容器(如std::vector、std::map)的自动转换。还支持将C++对象转换为JSON格式,或者将JSON数据解析为C++对象。该库还提供了对JSON数据的遍历、修改、删除等操作的支持;
  4. 高效性能:nlohmann/json库充分利用了C++11的特性,如移动语义和模板元编程等,以获得高效的性能。尽管在处理非常大的JSON文件时性能可能不是最优,但对于大多数应用场景来说,该库的性能已经足够出色。
  5. 兼容性强:nlohmann/json库支持多种JSON格式,包括RFC 8259、ECMA-404和JSON5等。这使得该库可以与不同的JSON数据源进行交互,提高了数据的兼容性;
  6. 开源免费:nlohmann/json是开源的,使用MIT许可证,可以免费使用和修改。提供了极大的便利和灵活性。

3 nlohmann/json库的使用方法

3.1 引入头文件

要使用nlohmann/json库,只需将头文件 single_include/nlohmann/json.hpp引入C++项目中即可。例如:

#include <nlohmann/json.hpp>
using json = nlohmann::json;

3.2 解析JSON字符串

使用json::parse函数将一个JSON格式的字符串解析为一个json对象。例如:

std::string jsonString = R"({"title": "gad", "year": 1940})";
json jsonObj = json::parse(jsonString);
std::string title = jsonObj["title"];
int year = jsonObj["year"];

3.3 访问JSON数据

提供访问STL容器一样访问json对象中的数据API。例如:

jsonObj["title"];       // 访问字符串类型的JSON数据(书名)
jsonObj["year"];        // 访问整数类型的JSON数据(出版年份)
jsonObj["is_available"];// 访问布尔类型的JSON数据(是否可借阅)
jsonObj["authors"];     // 访问数组类型的JSON数据(作者列表)

3.4 生成JSON对象

使用json对象来创建一个JSON对象,并将其转换为字符串。例如:

json jsonObj;
jsonObj["title"] = "The Catcher in the Rye";
jsonObj["year"] = 1951;
jsonObj["is_available"] = true;
jsonObj["authors"] = { "J.D. Salinger", "Bob" };
std::string jsonStr = jsonObj.dump(4);  // 参数4表示缩进4个空格

3.5 修改JSON数据

json对象中的数据直接进行修改。例如:

json jsonObj = {{"title", "1984"},{"year", 1949},{"is_available", false},{"authors", {"George Orwell"}}
};
jsonObj["year"] = 1950;                   // 修改出版年份
jsonObj["authors"].push_back("Erich Fromm"); // 添加新作者

3.6 将JSON写入文件

生成的json对象保存到文件中,或者从文件中读取json数据。例如:

std::ofstream file("book.json");
file << jsonObj.dump(4);  // 缩进4个空格
file.close();// 从文件读取
std::ifstream inputFile("book.json");
json readJson;
inputFile >> readJson;

3.7 遍历JSON对象

使用迭代器来遍历json对象中的键值对。例如:

for (auto it = jsonObj.begin(); it != jsonObj.end(); ++it) {std::cout << it.key() << ": " << it.value() << std::endl;
}

4 代码示例

4.1 定义JSON数值类型

json jsonObj;
jsonObj["title"] = "The Catcher in the Rye";
jsonObj["year"] = 1951;
jsonObj["is_available"] = true;
jsonObj["authors"] = { "J.D. Salinger", "Bob" };
jsonObj["nothing"] = nullptr;
jsonObj["version"] = { 0, 1, 2 };
jsonObj["object"] = { { "state", "pub" }, { "next version", 42.99 } };

4.2 从STL容器转换到json

std::vector<int> intVector{ 0, 1, 2, 3 };
json jVec(intVector);
std::cout << "jVec = " << jVec << std::endl;std::map<int, std::string> mapIntString{ {1, "one"},{2, "two"} };
json jMap(mapIntString);
std::cout << "jMap = " << jMap << std::endl;std::deque<double> doubleDeque{ 1.2,2.2,3.3 };
json jDeque(doubleDeque);
std::cout << "jDeque = " << jDeque << std::endl;

请添加图片描述

4.3 string序列化和反序列化及JSON格式和C++对象之间转换

#include <iostream>
#include <nlohmann/json.hpp>using json = nlohmann::json;struct Book {std::string title;int year;bool isAvailable;
};// 序列化:Book -> JSON
void to_json(json& j, const Book& book) {j = json{{"title", book.title},{"year", book.year},{"isAvailable", book.isAvailable}  // JSON字段名可与C++成员不同};
}// 反序列化:JSON -> Book
void from_json(const json& j, Book& book) {j.at("title").get_to(book.title);        // 使用 .at() 确保字段存在j.at("year").get_to(book.year);j.at("isAvailable").get_to(book.isAvailable);
}int main()
{Book book1{ "gad", 30, true };json jsonObj1 = book1;std::cout << "序列化结果:\n" << jsonObj1.dump(2) << "\n\n";// JSON转结构体std::string jsonStr = R"({"title": "The Great Gatsby","year": 1925,"isAvailable": true})";auto j2 = json::parse(jsonStr);Book book2 = j2.get<Book>();  // 自动调用 from_jsonstd::cout << "反序列化结果:\n"<< "书名: " << book2.title << "\n"<< "年份: " << book2.year << "\n"<< "可借阅: " << std::boolalpha << book2.isAvailable << std::endl;return 0;
}

请添加图片描述

4.4 stream的序列化和反序列化

std::ifstream inputFile("input.json");  
json inputJson;  
inputFile >> inputJson;  std::ofstream outputFile("output.json");  
outputFile << inputJson << std::endl;

4.5 任意类型转换

json j = { {"value", 42} };
int intValue = j["value"].get<int>();	// 显式类型转换
std::cout << "value = " << intValue << std::endl;

请添加图片描述

5 总结

nlohmann/json库是一个功能强大且简单易用的C++ JSON库。提供了丰富的API来解析、生成和操作JSON数据,并支持多种数据类型和高级功能。无论是处理简单的JSON数据还是复杂的JSON结构,nlohmann/json都能提供高效且方便的解决方案。


文章转载自:

http://oxCd9GmF.pxjhf.cn
http://uMMxu81h.pxjhf.cn
http://K8G3T4gt.pxjhf.cn
http://rBNqZTdp.pxjhf.cn
http://yxvuV1dz.pxjhf.cn
http://XK2uin91.pxjhf.cn
http://geRhHXb0.pxjhf.cn
http://S2G8KiMK.pxjhf.cn
http://1NYOdoO9.pxjhf.cn
http://ewgx5mk7.pxjhf.cn
http://PXFGKrqn.pxjhf.cn
http://XRaHIVrP.pxjhf.cn
http://FU4P7aww.pxjhf.cn
http://k9z1Gzu4.pxjhf.cn
http://QBDAHRx6.pxjhf.cn
http://xqw4L9GP.pxjhf.cn
http://JgiWYlIT.pxjhf.cn
http://8T6EhzbQ.pxjhf.cn
http://mNGpUfvL.pxjhf.cn
http://SxIoG6PT.pxjhf.cn
http://23zkXCcd.pxjhf.cn
http://WUy3iVVq.pxjhf.cn
http://0Mauz0sP.pxjhf.cn
http://oKO1Nt7h.pxjhf.cn
http://tAO4r2ag.pxjhf.cn
http://jnY36JSH.pxjhf.cn
http://Ouma5SPv.pxjhf.cn
http://3xByAfZk.pxjhf.cn
http://vkodXz2R.pxjhf.cn
http://koxaG86s.pxjhf.cn
http://www.dtcms.com/wzjs/613877.html

相关文章:

  • 网络公司网站 优帮云宣城网站开发专业制
  • 厦门蓝典网站建设国内做app软件开发最好的公司
  • 网站检索功能怎么做石家庄网站建设流程
  • 网站建设维护资质中国建设网官方网站证书查询
  • 地图截选做分析图的网站沧县网站建设公司
  • 怎么做58网站吊车网微信公众号的跳转网站怎么做
  • 文库网站开发教程建设网站大全
  • 朝阳区手机网站设计服务wordpress单页面制作
  • 哪个域名注册网站好京津冀协同发展规划纲要
  • 天天新品网做网站南京公司网站建设平台
  • 网站建设前期如何做好市场定位分析关键词网站优化平台
  • 个人网站命名的要求哪个网站可以找题目给小孩做
  • 已有网站开发app终端互联网品牌有哪些
  • 门户网站建设 增强责任意识家装设计师个人简介
  • 百度最新泛站群程序河北城乡建设学校官方网站
  • 企业网站页面图片网站初期建设方案
  • 做网站网页需要什么技术做快手电商需要什么条件
  • 可以做qq空间背景音乐的网站如何区分网站开发语言
  • 模板商城建站如何设计app
  • 无锡seo网站推广电商网站特点
  • 网站做ppt模板下载保定市网站建设
  • 使用element做的网站南宁住建局官方网
  • 像淘宝类别网站怎么做线上广告宣传方式有哪些
  • wordpress中文站网站程序 seo
  • 用文件传输协议登录网站免费网页设计制作网站
  • 北京盛赛车网站开发网站二级菜单模板
  • 建设礼品网站的策划书中国建筑app
  • 台州网站建设咨询薇微信公众平台小程序怎么制作
  • 免费舆情信息网站营销型网站用什么模版合适
  • htp免费域名注册网站装潢设计是什么