rust serialize and json
2025-05-03
Rust 中的 Serialize 与 Shell 中的 jq 区别
本文对比 Rust 中的 serde::Serialize 和 Shell 命令行工具 jq,两者虽然都涉及 JSON,但用途和用法完全不同。
✅ 核心区别一览
| 项目 | Rust Serialize |
Shell jq |
|---|---|---|
| 工具类别 | 编程语言特性(通过 serde 派生) | 命令行 JSON 解析器工具 |
| 使用语言 | Rust | Shell(bash/zsh 等) |
| 主要用途 | 将结构体、枚举等转换为 JSON、YAML 等格式 | 从 JSON 数据中提取、过滤、修改 |
| 使用方式 | 在代码中调用 serde_json::to_string 等方法 |
通过 jq 命令在终端解析 JSON 字符串 |
| 转换方向 | Rust 对象 → JSON(序列化) | JSON 字符串 → 字段值(解析) |
| 依赖/工具 | serde, serde_json 等库 |
安装 jq 命令行工具 |
🔧 示例对比
✅ Rust 中序列化(serde::Serialize)
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
age: u32,
}
fn main() {
let u = User {
name: "Alice".to_string(),
age: 30,
};
let json = serde_json::to_string(&u).unwrap();
println!("{}", json); // 输出:{"name":"Alice","age":30}
}
✅ Shell 中解析 JSON(jq)
cat data.json | jq '.name'
# 假设 data.json 内容是:{"name":"Alice","age":30}
# 输出: "Alice"
🧠 总结类比
| 功能 | Rust | Shell (jq) |
|---|---|---|
| 构建数据结构 | struct + #[derive(Serialize)] |
不适用 |
| 转换为 JSON | serde_json::to_string(...) |
不支持 |
| 读取/解析 JSON | serde_json::from_str(...) |
jq '.field' |
| 适用场景 | 写程序、服务端数据处理 | 命令行调试、轻量脚本 |
✅ 总结
- Rust 的
Serialize用于将结构体序列化为 JSON 字符串,适合程序内部使用; - Shell 的
jq用于命令行中读取和操作 JSON 文本,非常适合数据提取与过滤; - 二者用途不同,但在 JSON 数据处理链条中可以互补使用。