Linux——Json

一 概念

json是一种轻量级,基于文本的,可读的数据交换格式,能够让数据在不同系统(比如前端—后端,服务器—客户端)间方便传递/存储。在编程语言中都内置了处理json数据的方法

二 语法规则

1. 数据格式(键值对+结构化)

编译时后面要加-ljsoncpp

{"name": "小王",      // 字符串值"tel": "13500000000",// 字符串值 "age": 20,           // 数字值"is_vip": true,      // 布尔值"hobbies": ["篮球", "音乐"], // 数组"info": {            // 嵌套对象"city": "北京"     }
}

核心规则:

用{}表示对象(键值对集合),【】表示数组

键key必须是字符串(用双引号包裹)

值value可以是字符串,数字,布尔值,数组,null等

不同键值对用,分隔。最后一个不加

2. 和编程语言的映射

JSon::Value val; 在json这个名字空间中,value这个类的对象是val。这个里面存name/tel等

#include <iostream>
#include <string.h>
#include <string>
#include <jsoncpp/json/json.h>using namespace std;
int main()
{Json::Value val;val["name"] = "小王";//给json对象加键值对  name——小王val["tel"] = "13500000000";char buff[128] = {0};strcpy(buff, val.toStyledString().c_str());cout << buff << endl;Json::Value res;//用来存反序列化后的结果Json::Reader Read;//反序列化工具Read.parse(buff, res);//把buff中的JSON字符串转成JSon::Valuecout << res["name"].asString() << endl;cout << res["tel"].asString() << endl;
}

三 使用JsonCpp库操作JSON

流程:构建JSONM——序列化为字符串——反序列化为JSON——提取数据

1. 构建json对象(Json::Value val)

2. 序列化为字符串(val.toStyledString())

把内存里的 Json::Value数据对象(结构化数据),转成 人类可读的JSON字符串,方便存储 / 传输。返回std::string类型

 toStyledString(格式化序列化,输出带缩进换行,更美观)、toString(紧凑序列化,无多余空白)

  1. c_str() 的作用

    • val.toStyledString().c_str() 返回 const char*,指向 std::string 内部的以 '\0' 结尾的字符数组。
  2. strcpy 的类型匹配

    • strcpy 的原型为 char* strcpy(char* dest, const char* src)
    • buff 的类型是 char[128],在函数调用时 隐式转换为 char*(指向数组首元素的指针)。
    • 风险:若 JSON 字符串长度超过 127 字节,会导致 缓冲区溢出

3. 反序列化为JSON

Json::Reader Read;:创建一个解析器对象,像一个翻译器,负责把文本形式的JSON转化为程序能操作的结构化数据

线程安全:Json::Reader 实例 非线程安全,若在多线程环境中使用,需为每个线程单独创建。
生命周期:通常只需在解析 JSON 前创建,解析完成后可销毁(作用域结束自动释放)。
为什么要反序列化:因为传输 / 存储时只能用字符串,但程序要操作数据,必须转回结构化对象。

Read.parse(...):执行解析操作,将 JSON 字符串(存储在 buff 中)解析为 Json::Value 对象(存储在 res 中),便于后续程序访问 JSON 中的字段。

res:
类型:Json::Value&(引用)。
含义:解析结果将存入此对象。
示例:解析后可通过 res["name"] 访问 "小王"。

为什么res是引用?

Json::Reader::parse 的目的是把输入的 JSON 字符串解析成 Json::Value 类型的结构化数据。函数需要将解析后的结果 “输出” 给调用者,引用是实现这种 “输出” 的高效方式:如果不用引用,而是按值传递(Json::Value res),函数内部对 res 的修改无法传递到函数外部,调用者拿不到解析后的结果,无法实现 “将 JSON 字符串解析为可用对象” 的核心需求。

通过引用传递(Json::Value&),函数直接操作调用者提供的 res 对象,无需拷贝,效率更高,尤其是在处理大型 JSON 数据时,这种性能优势更明显。

4. 按键提取json数据并转化为字符串

 res["name"].asString():
从 Json::Value 对象中,按 键(Key) 提取对应的值,并将其转换为 C++ 的 std::string 类型。

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

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

相关文章

大模型之微调篇——指令微调数据集准备

写在前面 高质量数据的准备是微调大模型的重中之重&#xff0c;一些高质量的数据集可能远比模型性能更佳重要。 我是根据自己的数据照着B站up code花园LLaMA Factory 微调教程&#xff1a;如何构建高质量数据集&#xff1f;_哔哩哔哩_bilibili做的。 数据集格式 在LLaMA Fa…

LVS—DR模式

LVS—DR模式 LVS DR 模式详细简介 一、模式定义与核心原理 LVS DR&#xff08;Direct Routing&#xff09;模式&#xff0c;即直接路由模式&#xff0c;是 Linux Virtual Server&#xff08;LVS&#xff09;实现负载均衡的经典模式之一&#xff0c;工作于网络四层&#xff0…

宝玉分享VibeCoding构建Agent

借助 Claude Code 完成的一个翻译智能体 (Translator Agent)。你只需输入一段文字、一个网址或一个本地文件路径&#xff0c;它就能自动提取内容并完成翻译。更酷的是&#xff0c;它还能修正原文中的拼写错误&#xff0c;确保译文的准确流畅。 到底什么是“真正的”AI Agent&a…

在spring boot中使用Logback

在 Spring Boot 中使用 Logback 作为日志框架是开发中的常见需求&#xff0c;因其高性能和灵活配置而广受青睐。以下是详细实践指南&#xff0c;结合了配置方法、代码示例及最佳实践&#xff1a; &#x1f527; 一、依赖配置 Spring Boot 默认集成了 Logback&#xff0c;无需手…

腾讯云 Lighthouse 轻量应用服务器:数据驱动的架构选型指南

摘要&#xff1a;腾讯云 Lighthouse 作为面向轻量级应用场景的优化解决方案&#xff0c;通过高性价比套餐式售卖、开箱即用应用模板及流量包计费模式&#xff0c;显著降低中小企业与开发者的上云门槛。本文基于性能测试与横向对比&#xff0c;量化分析其核心优势与适用边界。 …

Linux TCP/IP协议栈中的TCP输入处理:net/ipv4/tcp_input.c解析

在网络通信领域,TCP(传输控制协议)因其可靠的面向连接特性而被广泛应用。Linux内核的TCP/IP协议栈实现了对TCP协议的高效处理,其中net/ipv4/tcp_input.c文件扮演着关键角色,负责处理TCP数据包的输入逻辑。下面是对该文件核心功能的深入剖析。 一、TCP数据包接收与处理 (…

物联网传输网关、RTU、DTU及SCADA系统技术解析

目录 摘要 一、引言 二、物联网传输网关 1. 定义 2. 类型 3. 分类 4. 工作原理 5. 差异分析 总结&#xff1a; 三、RTU&#xff08;远程终端单元&#xff09; 1. 定义 2. 工作原理 3. 特点 4. 应用场景 四、DTU&#xff08;数据传输单元&#xff09; 1. 定义 …

【unity游戏开发——热更新】YooAsset简化资源加载、打包、更新等流程

注意&#xff1a;考虑到热更新的内容比较多&#xff0c;我将热更新的内容分开&#xff0c;并全部整合放在【unity游戏开发——热更新】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言1、什么是YooAsset&#xff1f;2、系统需求3、系统特点 一、下载安装…

AWS RDS/Aurora 开启 Database Insights 高级模式全攻略

想要深入了解数据库性能问题?AWS Database Insights 高级模式为您提供强大的性能分析工具。本文详细对比标准模式与高级模式的功能差异,并提供完整的启用指南和实战测试结果。 一、Database Insights 模式对比 AWS CloudWatch Database Insights 提供两种模式:标准模式和高…

XML SimpleXML

XML SimpleXML 引言 XML&#xff08;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;它被广泛应用于Web服务和数据交换。SimpleXML是PHP中一个处理XML数据非常便捷的库。本文将详细介绍SimpleXML库的基本用法&#xff0c;帮助读者快速掌握XML数据…

Docker简单介绍与使用以及下载对应镜像(项目前置)

DockerDocker安装Docker卸载Docker配置镜像源配置镜像加速 Docker服务命令1.镜像操作命令2.容器操作命令 安装Mysql**数据卷挂载** Docker 在linux中软件安装说起: 以前在linux中安装软件,是直接安装在linux操作系统中,软件和操作系统耦合度很高,不方便管理. 因为linux版本不…

MyBatis 简介

MyBatis 简介 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射&#xff0c;能够帮助开发者将 Java 对象与数据库表进行灵活映射&#xff0c;简化数据持久化操作。以下从多个维度详细介绍 MyBatis&#xff1a; 一、核心定位与优势 轻量级…

自监督学习在合成孔径声呐目标识别中的应用之论文阅读

自监督学习在合成孔径声呐目标识别中的应用 BW Sheffield 美国巴拿马城海军水面作战中心 1 引言 在自主水下航行器(AUVs)中应用计算机视觉面临着独特的挑战,因为海洋环境往往条件不可预测且极为严苛。传统计算机视觉研究主要依赖光学相机成像,而在光照不足、悬浮沉积物及水…

进程间通信2(命名管道)linux

1 命名管道 前面讲到匿名管道&#xff0c;有一个很大的限制&#xff0c;那就是只有具有相同祖先&#xff08;具有亲缘关系&#xff09;的进程间才能进行通信&#xff0c;但是如果想实现不同进程间的通信&#xff0c;这个时候命名管道就发挥着巨大作用。 命名管道是一种特殊类…

简单通过SenseVoice给自己配置一个语音转文字服务

首先把代码下载下来 gitgithub.com:FunAudioLLM/SenseVoice.git 然后写一个docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

网络钓鱼攻击

​根据2023年Proofpoint年度网络钓鱼报告显示&#xff1a;91%的针对性攻击始于钓鱼邮件&#xff0c;平均每30秒就有一个企业成为攻击目标&#xff0c;全球损失超过$6.5B​ 一、钓鱼攻击技术深度解析 1. 钓鱼攻击核心技术架构 2. 现代钓鱼技术演进 ​攻击向量升级路线​ ​当前…

uvicorn api:app --host 0.0.0.0 --port 7777容器运行失败

docker logs pycorrector-container-gpu 你这个报错的核心是&#xff1a; ERROR: Error loading ASGI app, Could not import module "api".这说明&#xff1a; uvicorn api:app 没有找到 api.py 文件&#xff0c;或者没法导入 app 对象。 &#x1f50d; 一步步排查…

热成像仪测MOSFET温度

热成像仪测MOSFET温度 根据提供的搜索结果&#xff0c;热测量方法主要分为非接触式和接触式两大类&#xff0c;针对不同材料特性和测量场景各有优势。以下是核心方法的总结及关键技术要点&#xff1a; &#x1f525; 一、非接触式热测量方法 红外热成像技术 原理&#xff1a;通…

Dagster资产元数据与标签:数据治理的利器

在现代数据栈中&#xff0c;有效的数据治理至关重要。Dagster作为领先的数据编排平台&#xff0c;提供了强大的资产元数据和标签功能&#xff0c;帮助团队更好地理解、组织和跟踪数据资产。本文将深入探讨Dagster中的资产元数据和标签功能&#xff0c;展示如何利用这些功能提升…

基于物联网的智能饮水机系统设计

标题:基于物联网的智能饮水机系统设计 内容:1.摘要 随着物联网技术的快速发展&#xff0c;智能设备在日常生活中的应用越来越广泛。本研究的目的是设计一种基于物联网的智能饮水机系统&#xff0c;以提高饮水机的使用便捷性和智能化程度。方法上&#xff0c;通过传感器实时监测…