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"
  }
]

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年下半年系统规划与管理师论文真题

试题一、论IT服务规划设计 IT服务规划设计处于整个IT服务生命周期中的前端&#xff0c;可以帮助IT服务供方了解客户的需求并对其进行全面的需求分析&#xff0c;规划设计的范围不仅包括新的服务&#xff0c;还包括服务连续性保障服务水平的满足和对标准、规则的遵从&#xff0…

无人机动力测试台如何快速外接第三方传感器

前言 动力测试台对于测试动力系统的拉力、扭矩、RPM 和效率至关重要。将传感器集成到您的测试中增加了另一层优化&#xff0c;可以将您的性能提升到一个新的水平。 在无人驾驶行业中&#xff0c;有充分的证据表明&#xff0c;从外部传感器收集数据可能具有挑战性。为了解决这…

金蝶云星空与旺店通数据集成解决方案实例

金蝶云星空与旺店通旗舰奇门的数据集成案例分享 在企业日常运营中&#xff0c;数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体的系统对接集成案例&#xff1a;如何将金蝶云星空中的直接调拨单数据无缝集成到旺店通旗舰奇门平台。 本次集成方案命名…

gorm使用注意事项

1. 使用updates更新字段为0或""时 在updates更新时&#xff0c;会默认将数值为0、字符串为""等忽略掉&#xff0c;不会更新&#xff1b;比如 db.Model(&user).Updates(User{Name: "hello", Age: 18, Active: false, Games: 0, Friend: &qu…

docker compose - 设置名字

只使用 docker compose up 启动容器&#xff0c;默认名字为当前文件夹的名字 设置 project-name&#xff0c;docker 客户端会显示设置的名字&#xff0c;方便区分 docker compose --project-name webtest up错误&#xff1a; docker compose up --project-name webtest 效果…

破解反向代购复杂挑战,一站式简化逆向海淘购物

在全球化日益加深的今天&#xff0c;反向代购行业迎来了前所未有的发展机遇&#xff0c;同时也伴随着一系列挑战。这些企业不仅需要穿梭于世界各地的商场与网店&#xff0c;搜罗各式各样的商品&#xff0c;还要应对商品众多、客户下单繁杂以及客户细分需求多样化的现实问题。想…

户型超赞!招商“超级大城”再腾飞!三期新品全面升级!即将首开!

2024年9月底&#xff0c;美联储降息带来整体政策方向全面转变楼市组合大招密集落地&#xff0c;力度非同寻常。先是降息、降准、降存量房贷利率等货币宽松政策&#xff0c;到国家首提“止跌回稳”再到上海、深圳等一线城市连夜出台限购优化政策。在利好扶持重磅加码&#xff0c…

Web3 游戏周报(11.03 - 11.09)

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【11.03 - 11.09】Web3 游戏行业动态&#xff1a; Ton Accelerator 推出名为「Synergy」的 500 万美元计划&#xff0c;旨在推动跨链创新&#xff0c;创造 TON 用户与 EVM 网络适应…

Kafka面试题解答(一)

1.kafka消息发送的流程&#xff1f; 生产者&#xff1a; 在消息发送的过程中涉及到了两个线程&#xff1a;main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator&#xff08;默认32m&#xff09;。main线程将消息发送到RecordAccumulator,sender线程不断地…

从规划到执行:高效项目进度管理流程与技巧

项目进度管理是项目管理的一个重要组成部分&#xff0c;包括规划、组织和管理活动和资源&#xff0c;确保项目按时完成。 该流程首先明确定义实现项目目标所需的所有任务和活动&#xff0c;并将它们细分为更小、更易管理的项目模块&#xff0c;以便于全面规划和执行。项目进度…

【故障分析】屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)

此屏幕显示系统无法找到根文件系统 (/dev/mapper/rhel-root)。这通常是由于逻辑卷管理器(LVM)配置出现问题,或是 /etc/fstab 文件中的问题引起的。 以下是一些排查此问题的步骤: 检查 LVM 分区: 运行命令 ls /dev/mapper/ 查看是否存在 LVM 卷。 如果不存在,可能是 LVM …

位运算_常见位运算总结

目录 1.基础位运算 2.给一个数n&#xff0c;确定它的二进制中第X位是0还是1 3.给一个数n&#xff0c;把它二进制中第X位是改为1 4.给一个数n&#xff0c;把它二进制中第X位是改为0 5.提取一个数n二进制最右侧的一个1 6.去除一个数n二进制最右侧的一个1 7.异或运算 1.基础…

SuperMap GIS基础产品FAQ集锦(20241111)

一、SuperMap iDesktopX 问题1&#xff1a;请问一下&#xff0c;桌面端想要导入TXT和EXCEL格式的坐标文件&#xff0c;有没有相应的模板参考? 11.2.0 【解决办法】用户可以通过 Excel 工具将*.xlsx,.xls,.xml等格式的属性数据转化成 .csv 格式数据&#xff0c;进而实现将纯属…

介绍一款支持折线法、保护角法和滚球法的避雷针插件

基于目前的研究和开发成果&#xff0c;我们实现了一款CAD插件&#xff0c;来实现避雷区域的绘制功能&#xff0c;我来详细介绍一下操作步骤&#xff0c;如果有需要可以私聊我。 界面 单击菜单栏 HL防雷计算>折线法&#xff0c;可加载上图工具栏。 按钮含义&#xff1a; 按钮…

FreeRTOS task 源码解析

目录 一、基本结构和变量1、TCB_t2、状态链表2.1 pxCurrentTCB2.2 pxReadyTasksLists2.3 pxDelayedTaskList2.4 xSuspendedTaskList 3、任务调度器相关3.1 xSchedulerRunning3.2 uxSchedulerSuspended3.3 xPendedTicks3.4 xPendingReadyList 4、任务删除相关4.1 xTasksWaitingT…

面试击穿mysql

Mysql三大范式: 第一范式&#xff08;1NF&#xff09;&#xff1a; 不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如&#xff0c;在商品表中&#xff0c;若将商品名称、价格和类型都存储在同一个字段中&#xff0c;会带来诸多弊端。首先&#xff0c;在…

日常bug记录,easyexcel导入报错convert data ... to class java.math.BigDecimal error

排查发现实体类中有BigDecimal属性&#xff0c;然而数据中这个属性为null&#xff0c;进行转换时报错 解决方法&#xff1a;自定义转换器类 在实体类上加上自定义转换器

【Python】Pygame实战:实现基础跑酷游戏机(附源码)

创建一个完整的“天天酷跑”游戏是一个相当复杂的任务&#xff0c;因为它涉及到多个游戏机制、图形资源、音效、用户交互等。不过&#xff0c;我可以为你提供一个非常简化的Python示例&#xff0c;使用Pygame库来模拟跑酷游戏的一些基本元素。这个示例将包括一个玩家角色、简单…

认识QT以及QT的环境搭建

认识QT 什么是QT&#xff1f; Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。 认识客户端 现在我们所说的客户端开发其实大致分为三种&#xff1a; 1.网页前端开发。 2.桌面应用开发&#xff08;电脑的应用层序&#xff09; 3.移动应用开发。 而我们的QT的主战场就是在…

[ARM-2D 专题]6.脏矩形定义的宏使用技巧和分析

ARM-2d之所以能够高效的进行屏幕绘制&#xff0c;脏矩形的使用起到了巨大作用&#xff0c;功不可没。 简单介绍一下何谓脏矩形&#xff1a; 详细可以参考&#xff1a;如何用脏矩形优化显示帧率 在一帧画面的绘制的时候&#xff0c;我们只绘制画面中变化的部分&#xff0c;可以…