c++学习:json库例子

server/2024/11/27 16:33:24/

目录

初始化

解析string字符串并输出

json%E8%B5%8B%E5%80%BCstring%EF%BC%8Cchar%20*%EF%BC%8CQString%EF%BC%8Cbool%EF%BC%8Cint-toc" style="margin-left:0px;">赋值  给json赋值string,char *,QString,bool,int

json%E8%BD%AC%E4%B8%BAstring%EF%BC%8Cchar%20*%EF%BC%8CQString%C2%A0-toc" style="margin-left:0px;">赋值  将json转为string,char *,QString 

删除

嵌套对象和数组的组合与解析

JSON 数组  遍历,添加,修改  

类型转换

类型检查

自定义类与 JSON 序列化


用的是nlohmann/json的库

初始化

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

解析string字符串并输出

std::string json_str = R"({"name": "John", "age": 30, "city": "New York"})";json j = json::parse(json_str);std::cout << "Name: " << j["name"] << "\n";
std::cout << "Age: " << j["age"] << "\n";
std::cout << "City: " << j["city"] << "\n";

json%E8%B5%8B%E5%80%BCstring%EF%BC%8Cchar%20*%EF%BC%8CQString%EF%BC%8Cbool%EF%BC%8Cint">赋值  给json赋值string,char *,QString,bool,int

    json j;// 使用 std::string 给 JSON 赋值std::string name = "John";j["name"] = name;const char* city = "New York";j["city"] = city;QString country = "USA";j["country"] = country.toStdString();bool is_student = true;j["is_student"] = is_student;int age = 25;j["age"] = age;

json%E8%BD%AC%E4%B8%BAstring%EF%BC%8Cchar%20*%EF%BC%8CQString%C2%A0">赋值  将json转为string,char *,QString 

    json j;j["name"] = "John";j["age"] = 30;j["city"] = "New York";j["is_student"] = false;std::string json_str = j.dump();std::cout << json_str << std::endl;const char* char_text = json_str.c_str();// 如果需要修改 char*,可以进行拷贝:char* char_text_copy = new char[json_str.size() + 1];std::strcpy(char_text_copy, json_str.c_str());// 记得使用 delete[] 释放内存delete[] char_text_copy;QString qstr = QString::fromStdString(json_str);

删除

    json j = {{"name", "John"},{"age", 30},{"city", "New York"}};j.erase("age");std::cout << j.dump(4) << std::endl;

嵌套对象和数组的组合与解析

    json j1;// 嵌套 JSON 数组j1["name"] = "John";j1["age"] = 30;// 数组j1["phones"] = {"123-456-7890", "987-654-3210"};// 对象j1["address"] = {{"street", "123 Main St"}, {"city", "New York"}};
构建
{"address": {"city": "New York","street": "123 Main St"},"age": 30,"name": "John","phones": ["123-456-7890","987-654-3210"]
}json j = {{"name", "John"},{"age", 30},{"address", {{"street", "123 Main St"},{"city", "New York"},{"zipcode", "10001"}}},{"phones", {"123-456-7890", "987-654-3210"}}};// 访问嵌套数据std::cout << "Name: " << j["name"] << std::endl;std::cout << "Street: " << j["address"]["street"] << std::endl;std::cout << "First phone: " << j["phones"][0] << std::endl;

JSON 数组  遍历,添加,修改  

    // 遍历json j = {1, 2, 3, 4, 5};for (auto& el : j) {std::cout << el << " ";}std::cout << std::endl;// 添加j.push_back(6);// 输出修改后的数组std::cout << j.dump(4) << std::endl;// 修改json j = {{1, 2, 3},{4, 5, 6}};// 修改嵌套数组中的元素j[1][2] = 99;
[[1,2,3],[4,5,99]
]

类型转换

    json j = {{"name", "John"},{"age", 30},{"is_student", false}};// 将 JSON 数据转换为 C++ 类型std::string name = j["name"].get<std::string>();int age = j["age"].get<int>();bool is_student = j["is_student"].get<bool>();std::cout << "Name: " << name << ", Age: " << age << ", Is student: " << is_student << std::endl;

类型检查

is_number_integer()is_string()is_array()is_object()is_boolean()

自定义类与 JSON 序列化

class Person {
public:std::string name;int age;bool is_student;// 自定义的序列化函数NLOHMANN_DEFINE_TYPE_INTRUSIVE(Person, name, age, is_student)
};// 创建 Person 对象Person p{"John", 30, false};// 将 Person 对象序列化为 JSONjson j = p;std::cout << j.dump(4) << std::endl;// 从 JSON 反序列化为 Person 对象Person new_p = j.get<Person>();std::cout << "Name: " << new_p.name << ", Age: " << new_p.age << ", Is student: " << new_p.is_student << std::endl;


http://www.ppmy.cn/server/145377.html

相关文章

微信小程序学习指南从入门到精通

&#x1f5fd;微信小程序学习指南从入门到精通&#x1f5fd; &#x1f51d;微信小程序学习指南从入门到精通&#x1f51d;✍前言✍&#x1f4bb;微信小程序学习指南前言&#x1f4bb;一、&#x1f680;文章列表&#x1f680;二、&#x1f52f;教程文章的好处&#x1f52f;1. ✅…

Day 27 贪心算法 part01

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再去看动态规划,就会了解贪心和动规的区别。…

C语言实例之9斐波那契数列实现

1. 斐波那契数列简介 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多・斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为 “兔子数列”。 它的特点是从第三…

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址&#xff1a;https://unity.com/download 安装打开后如图所示&#xff1a; 2.下载 VRChat 官方推荐版本的 Unity 跳转界面&#xff08;VRChat 官方推荐页面&#xff09;&#xff1a;https://creators.vrchat.com/sdk/upgrade/…

javaweb-day01-html和css初识

html:超文本标记语言 CSS&#xff1a;层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图&#xff1a; 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 &#xff08;1&#xff09;盒子模型 &#xff08;2&#xff09;页面布局…

小程序-基于java+SpringBoot+Vue的农场管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

2024.11.26总结

今晚考了个科目四&#xff0c;只准备了半天&#xff0c;考试的时候几乎都是乱选的&#xff0c;选完后就走人了&#xff0c;相当于白白浪费了一次机会。有时候感觉上班太累了&#xff0c;不知道是心累&#xff0c;还是其他方面。 思来想去&#xff0c;还是决定继续在CSDN上输出…

哈希表—acwing

一、题目&#xff1a;模拟散列表 840. 模拟散列表 - AcWing题库 分析 代码&#xff08;哈希表的拉链存储结构&#xff09; // 哈希表拉链法存储结构 #include<bits/stdc.h> using namespace std;const int N 1e53; // 拉链结构 int h[N], e[N], ne[N], idx;void inse…