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

json转excel,读取json文件写入到excel中【rust语言】

 一、rust代码

将json文件写入到 excel中。(保持json :key原始顺序)

use indexmap::IndexMap;
use serde::Deserialize;
use serde_json::{Value, from_str};
use std::error::Error;
use std::io::{self, Write};
use std::path::{Path};
use rust_xlsxwriter::{Workbook, Format, RowNum};
use std::fs;#[derive(Debug, Deserialize)]
struct DataItem {#[serde(flatten)]data: IndexMap<String, Value>,
}fn main() -> Result<(), Box<dyn Error>> {let args: Vec<String> = std::env::args().collect();if args.len() < 3 {writeln!(io::stderr(), "Usage: {} <json_file> <excel_file>", args[0]).unwrap();std::process::exit(1);}let json_path = &args[1];let excel_file_path = &args[2];// 检查输入文件是否存在if !Path::new(json_path).exists() {return Err("输入文件不存在".into());}// 读取并解析JSONlet json_str = fs::read_to_string(json_path).map_err(|e| format!("读取JSON文件失败: {}", e))?;let data_items: Vec<DataItem> = from_str(&json_str).map_err(|e| format!("解析JSON失败: {}", e))?;// 创建Excel文件convert_json_to_excel(&data_items, excel_file_path)?;println!("Excel文件已生成: {}", excel_file_path);Ok(())
}fn convert_json_to_excel(data_items: &[DataItem], output_path: &str) -> Result<(), Box<dyn Error>> {// 创建一个新的工作簿let mut workbook = Workbook::new();// 添加一个工作表let mut sheet = workbook.add_worksheet();// 创建标题格式let header_format = Format::new().set_bold().set_align(rust_xlsxwriter::FormatAlign::Center).set_border(rust_xlsxwriter::FormatBorder::Thin);// 创建数据格式let mut data_format = Format::new().set_border(rust_xlsxwriter::FormatBorder::Thin).set_align(rust_xlsxwriter::FormatAlign::Left);if data_items.is_empty() {return Err("JSON数组为空".into());}// 获取第一个对象的键值对,保持原始顺序let first_item = &data_items[0];let ordered_keys: Vec<String> = first_item.data.keys().cloned().collect();// 写入表头for (col, key) in ordered_keys.iter().enumerate() {sheet.write_string_with_format(0, col as u16, key,&header_format)?;}// 写入数据for (row, item) in data_items.iter().enumerate() {for (col, key) in ordered_keys.iter().enumerate() {if let Some(value) = item.data.get(key) {let cell_value = match value {Value::Null => "null".to_string(),Value::Bool(b) => b.to_string(),Value::Number(n) => n.to_string(),Value::String(s) => s.clone(),Value::Array(a) => serde_json::to_string(a).unwrap_or_else(|_| "[]".to_string()),Value::Object(o) => serde_json::to_string(o).unwrap_or_else(|_| "{}".to_string()),};sheet.write_string_with_format((row + 1) as u16 as RowNum, col as u16, &cell_value,&data_format)?;}}}// 调整列宽for col in 0..ordered_keys.len() {sheet.set_column_width(col as u16, 20)?;}// 保存工作簿workbook.save(output_path)?;Ok(())
}

二、json 示例 

 [
  {
    "id": 1,
    "name": "张三",
    "age": 28,
    "email": "zhangsan@example.com"
  },
  {
    "id": 2,
    "name": "李四",
    "age": 34,
    "email": "lisi@example.com"
  },
  {
    "id": 3,
    "name": "王五",
    "age": 22,
    "email": "wangwu@example.com"
  },
  {
    "id": 4,
    "name": "赵六",
    "age": 45,
    "email": "zhaoliu@example.com"
  },
  {
    "id": 5,
    "name": "孙七",
    "age": 31,
    "email": "sunqi@example.com"
  }
]

相关文章:

json转excel,读取json文件写入到excel中【rust语言】

一、rust代码 将json文件写入到 excel中。&#xff08;保持json &#xff1a;key原始顺序&#xff09; use indexmap::IndexMap; use serde::Deserialize; use serde_json::{Value, from_str}; use std::error::Error; use std::io::{self, Write}; use std::path::{Path}; u…...

Java面试要点06 - static关键字、静态属性与静态方法

本文目录 一、引言二、静态属性&#xff08;Static Fields&#xff09;三、静态方法&#xff08;Static Methods&#xff09;四、静态代码块&#xff08;Static Blocks&#xff09;五、静态内部类&#xff08;Static Nested Classes&#xff09;六、静态导入&#xff08;Static…...

动态规划-背包问题——416.分割等和子集

1.题目解析 题目来源 416.分割等和子集——力扣 测试用例 2.算法原理 1.状态表示 这里背包问题基本上和母题的思路大相径庭&#xff0c;母题请见 [模板]01.背包 &#xff0c;这里的状态表示与装满背包的情况类似&#xff0c;第二个下标就是当选择的物品体积直接等于j时是否可…...

Pr:视频过渡快速参考(合集 · 2025版)

Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果&#xff0c;包含不同风格和用途&#xff0c;可在两个剪辑之间创造平滑、自然的转场&#xff0c;用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示&#xff1a; 点击下…...

网络安全---安全见闻2

网络安全—安全见闻 拓宽视野不仅能够丰富我们的知识体系&#xff0c;也是自我提升和深造学习的重要途径&#xff01;&#xff01;&#xff01; 设备漏洞问题 操作系统漏洞 渗透测试视角&#xff1a;硬件设备上的操作系统可能存在各种漏洞&#xff0c;攻击者可以利用这些漏洞…...

解决因为TortoiseSVN未安装cmmand line client tools组件,导致idea无法使用svn更新、提交代码

一.错误信息 1.更新代码时&#xff1a;SVN: 更新错误 找不到要更新的版本管理目录。 2.提交代码&#xff1a;检测不到任何更新&#xff08;实际上有代码修改&#xff09;。 3.Cannot run program "svn"。 二.原因分析 在电脑上新安装的的客户端TortoiseSVN、ide…...

Ubuntu 20.04安装CUDA 11.0、cuDNN 8.0.5

不知道咋弄的ubuntu20.04电脑的cuda驱动丢了&#xff0c;无奈需装PyTorch环境&#xff0c;只有CUDA11.0以上版本才支持Ubuntu20.04&#xff0c;所以安装了CUDA11.0、cuDNN8.0.5 为防止频繁在浏览器检索对应的贴子&#xff0c;今天记录一下。 一. 驱动安装 为防止驱动安装后没…...

鸿蒙 APP 发布上架

证书创建与打包: https://developer.huawei.com/consumer/cn/doc/app/agc-help-releaseharmony-0000001933963166 不同环境多渠道打包: //todo 备案相关 一、除了发布应用商店以外,还有3个渠道,都适合小规模内测。 【1】开放式测试:发给指定白名单用户 【2】发布企业内…...

【C++笔记】C++三大特性之继承

【C笔记】C三大特性之继承 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之继承前言一.继承的概念及定义1.1 继承的概念1.2继承的定义1.3继承基类成员访问方式的变化1.4继承类模板 二.基类和派生类间的转…...

如何在CentOS 7上搭建SMB服务

如何在CentOS 7上搭建SMB服务 因项目测试需求&#xff0c;需要自行搭建SMB服务&#xff0c;**SMB&#xff08;Server Message Block&#xff09;**协议是一种常用的文件共享方式&#xff0c;它可以让不同操作系统之间共享文件、打印机等资源。本文将带你一步步搭建一个简单的S…...

linux详解,基本网络枚举

基本网络枚举 一、基本网络工具 ifconfig ifconfig是一个用于配置和显示网络接口信息的命令行工具。它可以显示网络接口的P地址、子网掩码、MC地址等信息&#xff0c;还可以用于启动、停止或配置网络接口。 ip ip也是用于查看和管理网络接口的命令。 它提供了比ifconfig更…...

5G智能对讲终端|北斗有源终端|北斗手持机|单兵|单北斗

在当今这个快速发展的数字化时代&#xff0c;5G技术的广泛应用正以前所未有的速度推动着各行各业的变革。作为这一技术浪潮中的重要一环&#xff0c;5G智能终端QM630D凭借其卓越的性能和多样化的功能&#xff0c;在林业、渔业、安保、电力、交通等多个领域展现出了巨大的应用潜…...

第七部分:2. STM32之ADC实验--AD多通道(AD采集三路传感器模块实验:光敏传感器、热敏传感器、反射式传感器附赠温湿度传感器教程)

这个多通道采用非扫描模式--单次转换模式 1.代码配置链路图 2. ADC的输入通道 3.ADC的非扫描模式的转换模式&#xff08;单次和连续&#xff09; 4.ADC的扫描模式的转换模式&#xff08;单次和连续&#xff09; 5.采集校准 代码实验&#xff1a; 代码部分&#xff1a; #inclu…...

js.零钱兑换

链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何…...

GitHub 上的开源项目推荐

GitHub 上的开源项目有成千上万&#xff0c;涵盖了从前端框架到数据科学、机器学习、系统工具等各个领域。不同的人根据兴趣和需求&#xff0c;可能会有不同的排名。不过&#xff0c;一些开源项目因为其广泛的应用、社区支持和技术创新&#xff0c;通常被认为是“最好”的开源项…...

实现Reactor反应堆模型:框架搭建

实现Reactor反应堆模型&#xff1a;框架搭建 Reactor模型是一种常用于处理大量并发I/O操作的设计模式&#xff0c;特别适用于服务器端的网络编程。该模型通过事件驱动的方式&#xff0c;将I/O操作的处理与具体的业务逻辑分离&#xff0c;从而提高系统的并发处理能力和响应速度…...

UE5 样条线组件(未完待续)

按点生成模型 按距离生成 spline mesh 可缩放spline mesh...

计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议

文章目录 一、TCP/IP五层模型&#xff08;重要&#xff09;二、应用层常见的协议三、TCP与UDP3.1 TCP、UDP的区别&#xff08;重要&#xff09;3.2 运行于TCP、UDP上的协议3.3 TCP的三次握手、四次挥手3.3.1 TCP的三次握手3.3.2 TCP的四次挥手3.3.3 随机生成序列号的原因 四、T…...

sql速度优化多条合并为一条语句

在 SQL 中&#xff0c;结合 CASE 和 SUM 可以实现根据特定条件进行分组求和。在 ThinkPHP 中也可以使用类似的方式进行数据库查询操作。 例如&#xff0c;假设有一个销售数据表&#xff0c;包含字段 product_id &#xff08;产品 ID&#xff09;、 quantity &#xff08;销…...

用 PHP或Python加密字符串,用iOS解密

可以使用对称加密算法&#xff08;如 AES&#xff09;来加密和解密字符串。对称加密适合这种跨平台加密解密的需求&#xff0c;因为可以使用相同的密钥和算法在不同的编程语言和系统之间进行加密和解密。 下面展示如何使用 Python 或 PHP 进行加密&#xff0c;然后用 iOS (Swi…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...