Linux/C++:Json--网络编程中的奇妙小工具

目录

一、什么是Json

二、Josn基本结构

2.1Josn对象

2.2C++使用Josn

 2.3.1解析Josn格式的数据

2.4Linux编程(vscode)使用Josn


一、什么是Json

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它是基于JavaScript语言的子集,但是独立于编程语言的文字格式。JSON格式易于阅读和编写,同时也易于机器解析和生成。它常用于前端和后端之间的数据交换以及存储配置信息。JSON数据由键值对构成,可以表示对象和数组。由于其简洁性和易用性,JSON已经成为了互联网上常用的数据交换格式之一。

JSON的优点

1、易读性: JSON使用键值对的方式表示数据,易于阅读和编辑。
2、易解析性: JSON格式简单,易于解析和转换成数据对象,适合用于前后端数据交换。
3、跨语言性: JSON是一种独立于编程语言的数据格式,可以在各种编程语言中使用和解析。
4、数据量小: JSON数据量轻量,适合网络传输,响应速度快。
5、可嵌套性: JSON支持嵌套对象和数组,可以表示复杂结构的数据。


JSON的应用场景:

1、Web开发: 在前后端交互中,常用JSON格式传输数据,如通过AJAX请求获取数据。
2、API设计: JSON常用于设计RESTful API,作为数据交换格式,方便不同应用之间数据交互。
3、配置文件: JSON格式适合用于存储配置信息,如项目配置、数据映射等。
4、移动应用开发: 在移动应用中,常用JSON格式作为数据交互的标准格式,例如移动端与服务器接口的数据交互。

二、Josn基本结构

2.1Josn对象

JSON(JavaScript Object Notation)对象是 JSON 中最常用的一种结构。它由大括号 {} 包裹,包含一组键值对,每个键值对之间通过逗号分隔。

JSON 对象的基本结构:

{"key1": "value1","key2": "value2","key3": "value3"
}

 每个键值对由键(key)和值(value)组成,用冒号分隔。键是一个字符串,用双引号括起来,然后是冒号,而值可以是字符串、数值、布尔值、数组、甚至是另一个JSON对象。

2.2C++使用Josn


#include <iostream>
#include <string>
#include <vector>class Address {
public:std::string street;std::string city;
};class Person {
public:std::string name;int age;Address address;std::vector<std::string> hobbies;
};int main() {Person person;person.name = "John";person.age = 30;person.address.street = "123 Main St";person.address.city = "New York";person.hobbies = {"Reading", "Hiking"};// 将Person对象转换为JSON字符串nlohmann::json j;j["person"]["name"] = person.name;j["person"]["age"] = person.age;j["person"]["address"]["street"] = person.address.street;j["person"]["address"]["city"] = person.address.city;j["person"]["hobbies"] = person.hobbies;std::string jsonStr = j.dump();std::cout << jsonStr << std::endl;return 0;
}

 最后数据为:


{"person": {"name": "John","age": 30,"address": {"street": "123 Main St","city": "New York"},"hobbies": ["Reading", "Hiking"]}
}

 2.3.1解析Josn格式的数据

1、RapidJSON:RapidJSON是一个非常快速的JSON解析库,它提供了简单的API来解析和生成JSON数据。

#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <iostream>
#include <string>int main() {const char* json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";rapidjson::Document doc;doc.Parse(json);if (!doc.HasParseError()) {std::string name = doc["name"].GetString();int age = doc["age"].GetInt();std::string city = doc["city"].GetString();std::cout << "Name: " << name << ", Age: " << age << ", City: " << city << std::endl;} else {std::cout << "JSON parse error" << std::endl;}return 0;
}

2、JSON for Modern C++ (nlohmann/json):这是一个现代C++中使用的非常流行的JSON解析库。它提供了简单的API和STL兼容性,容易学习和使用。

示例代码:

#include <nlohmann/json.hpp>
#include <iostream>
#include <string>int main() {std::string json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";nlohmann::json j = nlohmann::json::parse(json);std::string name = j["name"];int age = j["age"];std::string city = j["city"];std::cout << "Name: " << name << ", Age: " << age << ", City: " << city << std::endl;return 0;
}

2.4Linux编程(vscode)使用Josn

头文件:#include <jsoncpp/json/json.h>

序列化: 

bool Serialize(std::string* out)
{// 转换成为字符串Json::Value root;root["x"] = _x;root["y"] = _y;root["oper"] = _oper;Json::FastWriter writer;// Json::StyledWriter writer;*out = writer.write(root);return true;
}

 反序列化:

bool Deserialize(const std::string& in) // 你怎么知道你读到的in 就是完整的一个请求呢?
{Json::Value root;Json::Reader reader;bool res = reader.parse(in, root);if (!res)return false;_x = root["x"].asInt();_y = root["y"].asInt();_oper = root["oper"].asInt();return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm软件初始化配置

安装完pycharm后&#xff0c;需要对其进行个性化设置&#xff0c;分别设置方法如下 目录 一、修改主题二、修改默认字体和大小三、设置拖动滚轮改变字体大小四、常见快捷键 一、修改主题 1、界面右上角点击红框的内容 2、选择Theme选项 3、选择对应的主题 第一二个是白色主题…

树莓派配置vsftpd被动模式使用frp外网端口映射实现外网连接ftp

sudo apt-get install vsftpd /etc/vsftpd.conf anonymous_enableNO # 禁用匿名用户 local_enableYES # 允许本地用户登录 write_enableYES # 允许修改权限 #chroot_local_userYES # 将用户限制在其主目录 百度关键字 frp vsftp 关闭主动模式登录 connect_from_port_…

电池技术的未来:BMS的创新与应用

目录 一、什么是BMS&#xff1f; 二、BMS的核心功能 三、为什么BMS如此重要&#xff1f; 四、应用领域 五、未来展望 随着电动汽车、储能系统以及各种便携式设备的普及&#xff0c;电池技术的发展变得至关重要。而在这一领域中&#xff0c;电池管理系统&#xff08;BMS&am…

直播美颜工具开发教学:视频美颜SDK集成详解

本篇文章&#xff0c;笔者将详细介绍如何在直播应用中集成视频美颜SDK&#xff0c;让你的直播画面焕然一新。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;提供了视频处理和图像增强功能。通过集成视频美颜SDK&#xff0c;开发者可以轻松…

可视化作品集(14)智慧旅游和智慧景区,洞悉一切。

智慧旅游和智慧景区的可视化大屏可以带来以下几个方面的好处&#xff1a; 1. 提升游客体验&#xff1a; 通过可视化大屏&#xff0c;游客可以方便地获取到景区地图、交通信息、景点介绍、活动安排等信息&#xff0c;帮助游客更好地规划行程&#xff0c;提升游览体验。 2. 提供…

超越99%动画!我测试了Luma AI视频的首尾帧,流畅度NO.1?

关键帧通常用于控制动画中的运动、形状变化、颜色变化、透明度等属性&#xff0c;以及视频和音频编辑中的剪辑、效果和音频级别。 最近一段时间&#xff0c;玩可灵AI玩得比较多&#xff08;国产免费速度快&#xff09;&#xff0c;luma上回写了一篇文章后就没有接着使用(排队生…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(2)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;2&#xff09; 第21题&#xff1a;在一个大型信息系统项目中&#xff0c;项目经理发现尽管已经建立了沟通机制&#xff0c;但团队间的沟通依然不畅&#xff0c;项目风险…

【python模块】Selenium

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 Selenium库功能介绍环境准备示例代码 Selenium库 Selenium库是一个强大的Web自动化工具&#xff0c;…

堆、栈和队列(数据结构)

堆、栈和队列&#xff08;数据结构&#xff09; 这里写目录标题 堆、栈和队列&#xff08;数据结构&#xff09;**栈****队列**堆&#xff08;Heap&#xff09;&#xff08;&#xff09;队列&#xff08;Queue&#xff09;&#xff08;FIFO&#xff09;栈&#xff08;Stack&…

【Rust】字符串String类型学习

什么是String Rust的核心语言中只有一个String类型&#xff0c;那就是String slice,str通常被当作是&str的借用。String类型是通过标准库提供的&#xff0c;而不是直接编码到核心语言中&#xff0c;它是一个可增长的、可变的、utf-8编码的类型。str和String都是utf-8编码的…

Faiss原理和使用

参考自https://github.com/facebookresearch/faiss/wiki&#xff0c;https://blog.csdn.net/Kaiyuan_sjtu/article/details/121551473 Faiss Faiss是一个用于高效相似性搜索和密集向量聚类的库。它包含搜索任意大小的向量集&#xff08;大小由RAM决定&#xff09;的算法。它还…

【vue教程】一. 环境搭建与代码规范配置

目录 引言Vue 框架概述起源与设计理念核心特性优势 Vue 开发环境搭建环境要求安装 Vue CLI创建 Vue 项目项目结构介绍运行与构建 组件实例基础模板响应式更新 代码规范为什么要使用代码规范在 Vue 项目中使用 ESLint 、PrettierESLint配置 ESLintrules 自定义错误级别 Prettier…

推理的判定定理三种验证方式

1. 真值表技术 2. 公式转换法 3. 主析取范式法 参考&#xff1a;离散数学-电子科技大学

数据结构第21节 归并排序以及优化方案

归并排序&#xff08;Merge Sort&#xff09;是一种分治策略的排序算法。它将一个大数组分成两个子数组&#xff0c;递归地对它们进行排序&#xff0c;然后将排序后的子数组合并成一个有序数组。 Java代码实现&#xff1a; public class MergeSort {public static void main(…

4.Flink程序编程规范

目录 概述 概述 Flink程序编程规范 官网文档速递 1.Obtain an execution environment 获取执行环境2.Load/create the initial data 加载/创建初始数据 > 数据接入3.Specify transformations on this data 针对数据做处理操作 > 数据处理4.Specify where to put the re…

Java-使用Redisson实现的分布式锁

在使用Redisson实现的分布式锁时&#xff0c;可以很容易地在Java中加入多线程代码来模拟并发环境下 的锁行为。以下是一个使用Redisson的RLock接口创建分布式锁并在多线程环境中使用的示例代 码&#xff1a; 首先&#xff0c;需要在项目中添加Redisson的依赖。如果你使用Mav…

LLM-阿里 DashVector + langchain self-querying retriever 优化 RAG 实践【Query 优化】

文章目录 前言self querying 简介代码实现总结 前言 现在比较流行的 RAG 检索就是通过大模型 embedding 算法将数据嵌入向量数据库中&#xff0c;然后在将用户的查询向量化&#xff0c;从向量数据库中召回相似性数据&#xff0c;构造成 context template, 放到 LLM 中进行查询…

python如何判断变量是否可迭代

python如何判断变量是否可迭代&#xff1f;方法如下&#xff1a; 方法一&#xff1a; 适用于python2和python3 >>> from collections import Iterable >>> isinstance("str", Iterable) True 方法二&#xff1a; 适用于python3 s "hello …

InterSystems IRIS使用python pyodbc连接 windows环境,odbc驱动安装,DSN配置,数据源配置

一、创建的数据库和数据 SELECT 1SELECT $ZVERSIONCREATE TABLE MyApp.Person ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHAR(1) );CREATE TABLE MyApp.Person2 ( ID INT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Age INT, Gender CHA…

Gil-Pelaez inversion

一、特征函数 A.随即变量的特征函数定义与性质 B.特征函数与PDF的关系 傅里叶变换:C.特征函数与矩函数关系 二、Gil-Pelaez反演定理 输入功率 P i n P_{in}