首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
Vibe Coding这一年:从“代码苦力”到“超级个体”,我如何把3天的工作压缩进2小时?
2
小程序项目架构设计与基础页面搭建(基础)
3
微信小程序送补贴!手把手教你薅免费云开发资源+混元Token(附使用教程)
4
如何创建一个有效的阅读清单?
5
踩坑记:Elasticsearch 索引写不进去了?可能是触碰了这个隐藏限制
6
RoLID-11K:面向小目标检测的行车记录仪路边垃圾数据集
7
mysql报错通用排查方法 排查MY-001312 can't return a result set in the given context
8
安装并使用谷歌AI编程工具Antigravity(亲测有效)
9
解密Prompt系列68. 告别逐词蹦字 - Transformer 的新推理范式
10
技术人的人生战略:在代码与成长中寻找平衡
11
JavaScript 文件分析与漏洞挖掘指南
12
多 Agent 视角下的自动驾驶系统设计:车端 Agent 与 RSU Agent 协同机制解析
13
构建AI智能体:潜藏秩序的发现:隐因子视角下的SVD推荐知识提取与机理阐释
14
告别浏览器!用Rust打造一键JSON处理神器
15
仅需1元,基于 LangChain 和腾讯混元大模型,实现知识图谱
16
轻量高效!用Docker运行Gogs,搭建属于你的私有GitHub
17
构建AI智能体:SVD知识整理与降维:从数据混沌到语义秩序的智能转换
18
2025年CodeBuddy是如何拯救职场危机中的我?
19
轻量化知识库方案:Docker部署Dokuwiki 的最佳实践
20
踩坑实录:别被 extended_bounds 骗了!ES 直方图聚合的边界陷阱
21
步履不停,共鸣常在:我的 2025 技术旅程与回响
22
构建AI智能体:从SVD的理论到LoRA的实践:大模型低秩微调的内在逻辑
23
[MYSQL] 恢复被drop/truncate的表
24
Sugo Protector 代码保护效果分析报告
25
前端平台大仓应用稳定性治理之路|得物技术
26
C++的5种高级初始化技术:从reserve到piecewise_construct等
27
HierLight-YOLO:面向无人机航拍的层次化轻量目标检测网络
28
金融服务领域的智能体革命:AI智能体解决方案、产业分析与技术实施的战略分析
29
大模型提示词-新手篇
30
2025,一个普通开发者的社区成长地图
31
“氛围编程”正让创意本身成为最终技能
32
AD域攻防权威指南:九.利用备份组获取域Hash
33
【跟着AI学】H5射击游戏开发实录:射击游戏
34
这一年,熬过许过夜,也有些许收获 | 2025年终总结
35
2025,一个技术徘徊者的AI工具真实答卷
36
告别手撸架构图!AI+Ooder实现漂亮架构+动态交互+全栈可视化实战指南
37
GitHub 霸榜:让你的 Claude 拥有“设计总监”级的品味,只要一行命令
38
构建AI智能体:AI古典文学:基于LoRA微调本地大模型打造唐诗生成器
39
拥抱人机共生,锻造不可替代的“金头脑”
40
[MYSQL] 5.7能否从ibdata1中提取出表DDL
41
Spring Boot 实战:手把手教你实现腾讯云 COS 对象存储文件上传
42
解密Prompt系列67. 智能体的经济学:从架构选型到工具预算
43
Google OCS光路解耦揭秘:寒武纪大爆发,从供应链双轨到CPO百万卡全光计算织物
44
未来已来 | 写给 .NET 开发者的 2025 年度总结
45
MYSQL实战:深入理解内存临时表优化
46
Ooder框架规范执行计划:企业级AI实施流程与大模型协作指南
47
openGauss 核心体系架构深度解析
48
架构视角:Jackson3新特性
49
LLM架构机制管窥:作为黑板的上下文窗口
50
LiveKit Agents 深度技术架构剖析
清单首页123文章详情

告别浏览器!用Rust打造一键JSON处理神器

前言

两篇文章下来,环境搭好了,也写了个TODO工具。但说实话,那个TODO工具虽然能用,但使用频率可能不高。

这次我们来做个真正高频使用的工具:JSON格式化处理工具。为什么说高频?因为只要你是程序员,几乎都要处理JSON。

传统方式的痛点

作为开发者,你肯定遇到过这些场景:

场景1:调试API

代码语言:txt
复制
1. Postman返回一坨压缩的JSON
2. Ctrl+C 复制
3. 打开浏览器
4. 搜索"JSON formatter"
5. 粘贴JSON
6. 点击"Format"
7. 再复制回来

场景2:压缩配置文件

代码语言:txt
复制
同样的流程,只不过点的是"Minify"按钮
还要担心网站是否保存了你的数据

每次都要这么折腾! 要是JSON有语法错误,还不告诉你具体哪里错了。

我们的解决方案

代码语言:bash
复制
# 复制API返回的JSON后
jsonf format

# 完成!格式化结果已在剪贴板

就这么简单!

  • 不用打开浏览器
  • 不用访问网站
  • 不用手动粘贴
  • 结果自动复制到剪贴板

这才是程序员真正需要的工具。


项目设计

核心功能

我们要实现4个命令:

  1. format - 格式化(美化)JSON
  2. minify - 压缩JSON
  3. validate - 验证JSON语法,精确指出错误位置
  4. analyze - 分析JSON结构统计

最大亮点

智能输入源检测

  • 提供文件路径 → 从文件读取
  • 管道输入 → 从stdin读取
  • 啥都不提供 → 自动从剪贴板读取

自动输出到剪贴板

  • 处理完的结果自动复制
  • 直接粘贴使用
  • 省去手动复制步骤

技术选型

  • serde/serde_json - JSON序列化,Rust生态的标准
  • arboard - 跨平台剪贴板操作
  • colored - 彩色终端输出
  • clap - 强大的CLI参数解析

第一步:创建项目

代码语言:bash
复制
cargo new json_formatter
cd json_formatter
ls -la
创建项目

可以看到cargo又帮我们生成了完整的项目结构,包括git仓库。这个习惯真好,每个项目都从一开始就被git管理。


第二步:配置依赖

编辑 Cargo.toml

配置依赖
代码语言:toml
复制
[package]
name = "json_formatter"
version = "0.1.0"
edition = "2021"

[[bin]]
name = "jsonf"
path = "src/main.rs"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
colored = "2.1"
arboard = "3.3"
clap = { version = "4.4", features = ["derive"] }

几个要点

  1. [[bin]] 配置 - 把可执行文件命名为 jsonf,比 json_formatter 短多了
  2. serde的derive特性 - 自动生成序列化代码
  3. arboard - 这是剪贴板操作的关键,跨平台支持Mac/Linux/Windows
  4. clap的derive特性 - 用宏自动生成命令行参数解析

第三步:命令行结构设计

命令行定义

用clap定义命令结构非常优雅:

代码语言:rust
复制
#[derive(Parser)]
#[command(name = "jsonf")]
#[command(about = "JSON格式化工具 - 美化、压缩、验证JSON")]
struct Cli {
    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand)]
enum Commands {
    Format {
        file: Option<String>,
        #[arg(long)]
        no_copy: bool,
    },
    Minify {
        file: Option<String>,
        #[arg(long)]
        no_copy: bool,
    },
    Validate {
        file: Option<String>,
    },
    Analyze {
        file: Option<String>,
    },
}

这里的设计很巧妙

  • file: Option<String> - 文件路径是可选的
  • 不提供 = 从剪贴板读取
  • 提供了 = 从文件读取
  • no_copy 选项可以禁用自动复制到剪贴板

第四步:编译项目

代码语言:bash
复制
cargo build
编译代码

第一次编译会下载很多依赖,花了13秒多。可以看到下载了:

  • serdeserde_json - JSON处理
  • arboard - 剪贴板
  • colored - 彩色输出
  • clap 相关的一堆库

编译完还有2个警告

代码语言:txt
复制
warning: unused import: `json`
warning: unused variable: `indent`

Rust编译器 - 严格但友好

这就是Rust的特色。其他语言(Python、JavaScript、Go)不会提示这些:

代码语言:python
复制
# Python - 静悄悄通过
import json  # 导入了但没用
def process(data, indent):  # indent没用
    pass

Rust不允许。它会告诉你:

  1. 哪里有问题(第几行第几列)
  2. 具体什么问题(未使用的导入/变量)
  3. 怎么修复(给出建议)

为什么这么严格?

  • 帮你写出更干净的代码
  • 避免潜在的bug(可能是你忘记用了)
  • 减少代码腐化

这就是Rust的哲学:"如果编译通过了,大概率就不会出bug"

按照提示修改代码,重新编译就干净了。这个过程让你的代码质量更高。


第五步:准备测试数据

创建三个测试文件:

测试文件
  1. test.json - 正常的JSON,但格式混乱
  2. messy.json - 压缩成一行的JSON
  3. error.json - 有语法错误的JSON

这三个文件覆盖了典型场景:格式化、压缩、错误检测。


第六步:查看帮助信息

代码语言:bash
复制
cargo run -- --help
cargo run -- format --help
帮助信息

clap自动生成的帮助文档非常专业:

  • 清晰的用法说明
  • 每个命令的描述
  • 参数说明

这就是用框架的好处,不用自己写帮助文档。


第七步:测试格式化功能

代码语言:bash
复制
cargo run -- format test.json
格式化输出

效果非常棒!

可以看到:

  • JSON被美化了,缩进清晰
  • 彩色输出 - key是蓝色,值根据类型有不同颜色
  • 显示"已复制到剪贴板"
  • 显示字符数统计

对比原始文件

代码语言:json
复制
// 原来是一坨
{"name":"张三","age":25,"skills":["Rust","Python","JavaScript"],...}

// 格式化后
{
  "active": true,
  "address": {
    "city": "北京",
    "district": "朝阳区"
  },
  "age": 25,
  ...
}

核心实现:彩色输出

代码里用了 colored 库:

代码语言:rust
复制
println!("{}", key.cyan().bold());     // 键名青色加粗
println!("{}", string.green());         // 字符串绿色
println!("{}", number.yellow());        // 数字黄色
println!("{}", boolean.magenta());      // 布尔紫色

让输出更容易阅读,一眼就能看出JSON结构。


第八步:测试压缩功能

代码语言:bash
复制
cargo run -- minify messy.json
压缩输出

压缩结果直接输出成一行:

代码语言:json
复制
{"items":[{"id":1,"price":99.99},{"id":2,"price":199.99}],"name":"测试用户","total":299.98}

还显示了压缩统计

  • 原始大小
  • 压缩后大小
  • 减少百分比

这对于优化配置文件大小很有用。同样,结果已经自动复制到剪贴板。


第九步:测试错误检测

代码语言:bash
复制
cargo run -- validate error.json
错误检测

这是最厉害的功能!

对于有错误的JSON:

代码语言:json
复制
{
  "name": "测试",
  "age": 25,
  "invalid":    // ← 缺少值
}

我们的工具会:

  1. 精确定位:第5行,第1列
  2. 显示上下文:把错误附近的代码列出来
  3. 用红色标记错误行
  4. 用箭头指出具体位置

对比其他工具

  • 浏览器JSON工具:只说"语法错误",不告诉你哪里错
  • Python json.loads:报错信息不友好
  • 我们的工具:精确到行列,还显示上下文

这就是Rust生态的优势,serde_json 的错误信息质量很高。


第十步:剪贴板功能 - 最实用的特性!

这是最核心的功能,也是最大的创新点。

剪贴板格式化

使用流程

代码语言:bash
复制
# 1. 在任何地方复制一段JSON(Cmd+C)
# 2. 运行命令
cargo run -- format
# 3. 完成!结果已在剪贴板

工具会自动检测

  • 显示"📋 从剪贴板读取..."
  • 处理JSON
  • 显示格式化结果
  • 显示"📋 已复制到剪贴板"

实现原理

这是通过 arboard 库实现的:

代码语言:rust
复制
use std::io::IsTerminal;

fn read_input(file: &Option<String>) -> Result<String, String> {
    match file {
        Some(path) => {
            // 从文件读取
            fs::read_to_string(path)?
        }
        None => {
            // 检测stdin是否是终端
            if !io::stdin().is_terminal() {
                // 从管道读取
                let mut buffer = String::new();
                io::stdin().read_to_string(&mut buffer)?;
                Ok(buffer)
            } else {
                // 从剪贴板读取
                let mut clipboard = Clipboard::new()?;
                clipboard.get_text()?
            }
        }
    }
}

智能三路判断

  1. 提供了文件参数 → 文件读取
  2. 是管道输入 → stdin读取
  3. 否则 → 剪贴板读取

这就是为什么我们的工具这么灵活:

代码语言:bash
复制
jsonf format file.json      # 方式1:文件
cat file.json | jsonf format # 方式2:管道
jsonf format                  # 方式3:剪贴板 ⭐

第十一步:安装到系统

现在我们要让工具全局可用。

编译release版本

代码语言:bash
复制
cargo build --release

release版本会进行优化:

  • 编译时间长一点
  • 但生成的二进制更小、更快
  • 没有调试信息

安装到系统

代码语言:bash
复制
sudo cp target/release/jsonf /usr/local/bin/

把编译好的可执行文件复制到系统路径。

验证安装

代码语言:bash
复制
which jsonf
# 输出:/usr/local/bin/jsonf

现在可以在任何地方使用了!

实际使用

安装到系统

从截图可以看到,安装后直接用 jsonf 命令:

代码语言:bash
复制
# 复制一段JSON后
jsonf format

# 输出彩色格式化结果
# 自动复制到剪贴板

还测试了 minify

代码语言:bash
复制
jsonf minify
# 输出:{"items":[{"id":1,"price":99.99}...]...}

完美!工具已经真正可用了。

总结

通过这个项目,我们:

做了什么

  1. ✅ 实现了一个完整的JSON处理工具
  2. ✅ 支持格式化、压缩、验证、分析
  3. 核心创新:剪贴板自动读写
  4. ✅ 跨平台支持
  5. ✅ 安装到系统,全局可用

学到了什么

  1. 系统级编程 - 剪贴板操作、stdin检测
  2. 跨平台抽象 - 一份代码到处运行
  3. CLI设计 - clap框架的强大功能
  4. 错误处理 - Rust的Result和map_err
  5. 用户体验 - 彩色输出、清晰提示
  6. release编译 - 生产级别的优化

解决了什么问题

彻底改变了JSON处理的工作流

代码语言:txt
复制
旧方式:复制 → 打开浏览器 → 找网站 → 粘贴 → 格式化 → 复制回来
新方式:复制 → jsonf format → 完成

这才是真正实用的工具。

Rust的价值

这个项目充分展示了Rust的优势:

  • 安全 - 编译器保证没有内存问题
  • 高性能 - 原生可执行文件,启动快
  • 跨平台 - 轻松支持Mac/Linux/Windows
  • 生态好 - arboard、clap、serde等库质量高
  • 开发体验 - 错误提示友好,重构容易

实用建议

创建别名

把这个加到 ~/.zshrc

代码语言:bash
复制
alias jf="jsonf format"
alias jm="jsonf minify"
alias jv="jsonf validate"

然后就可以:

代码语言:bash
复制
jf   # 格式化剪贴板中的JSON
jm   # 压缩
jv   # 验证

配合其他工具

代码语言:bash
复制
# 格式化curl结果
curl https://api.github.com/users/rust-lang | jf

# 查看Docker inspect结果
docker inspect container_id | jf

# 格式化git配置
cat .git/config | jf

日常工作流

我现在的JSON处理流程:

  1. API返回JSON → 复制
  2. jf → 格式化
  3. 粘贴到代码里

快到飞起!


做完这个工具,你真的会每天用它。 这就是学编程的意义:解决实际问题,提高工作效率。

Rust让我们能写出这样的工具:安全、快速、跨平台。继续探索Rust,你会发现更多可能性。

下一篇
举报
领券