You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中如何将&str转换为JSON 是否存在Python json.loads等效方法

Rust 生态中最常用的 JSON 处理库是 serde_json,其中 serde_json::from_str() 方法就完全等价于 Python 的 json.loads(),可以实现 JSON 字符串的解析,搭配 serde_json::to_string_pretty() 就能直接输出你需要的带缩进换行的格式化 JSON。

第一步:添加依赖

在 Cargo.toml 中引入所需依赖:

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

两种实现方式

  • 方式1:无需定义结构体,直接解析为动态 JSON 值
use serde_json::Value;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 你的输入 &str 字符串
    let input_str = r#"{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}"#;

    // 等价于 Python json.loads,解析为动态JSON值
    let json_value: Value = serde_json::from_str(input_str)?;

    // 输出格式化后的JSON,等价于Python json.dumps(indent=...)
    let formatted = serde_json::to_string_pretty(&json_value)?;
    println!("{}", formatted);

    Ok(())
}
  • 方式2:类型安全实现,解析为自定义结构体
use serde::Deserialize;
use serde_json::to_string_pretty;

// 定义和JSON结构匹配的结构体,派生Deserialize trait支持自动解析
#[derive(Deserialize, Debug)]
struct BizData {
    index: u32,
    name: String,
    sts: String,
    time: String,
    value: i32,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let input_str = r#"{"index":0,"name":"AB/CDE/FG/402/test_int4","sts":"on","time":"2021-06-05 03:28:24.044284300 UTC","value":8}"#;

    // 直接解析为自定义结构体,字段类型不匹配会直接抛出错误,类型安全
    let data: BizData = serde_json::from_str(input_str)?;

    // 输出格式化JSON
    println!("{}", to_string_pretty(&data)?);
    Ok(())
}

两种方式运行后输出的结果就是你要求的带换行、缩进的格式化JSON格式。

内容的提问来源于stack exchange,提问作者JNP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 02:27:00