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 数据处理链条中可以互补使用。