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

如何将文本序列化的JSON反序列化为Rust对象?

Rust中反序列化带转义的JSON字符串

你的核心问题是my.txt中的内容并非标准JSON,而是被字符串包裹且内部JSON做了转义处理的文本。要解析它需要分两步:先提取出内部的原始JSON文本,再反序列化为Rust对象。

实现步骤与代码

因为你不知道JSON的结构,所以依然用serde_json::Value来存储解析结果,具体代码如下:

首先确保Cargo.toml的依赖配置正确:

[dependencies]
serde_json = "1.0"

然后编写解析逻辑:

use std::fs;
use serde_json::{Value, Error};

fn main() -> Result<(), Error> {
    // 读取my.txt文件内容
    let wrapped_json = fs::read_to_string("my.txt")
        .expect("无法读取文件");
    
    // 第一步:解析外层包裹的字符串,得到内部原始JSON文本(自动处理转义)
    let raw_json: String = serde_json::from_str(&wrapped_json)?;
    
    // 第二步:将原始JSON文本反序列化为Value对象
    let json: Value = serde_json::from_str(&raw_json)?;
    
    // 验证解析结果
    println!("完整JSON对象:{}", json);
    println!("name字段:{}", json["name"]);
    println!("time字段:{}", json["time"]);
    
    Ok(())
}

为什么这样做?

my.txt里的内容"{\"name\":\"as.up.data.forward\",\"time\":\"2023-03-13T18:58:41.933481750Z\"}"本质是一个JSON字符串类型的值——它被双引号包裹,内部的双引号用\转义。用serde_json::from_str将其解析为Rust的String时,serde会自动处理所有转义字符,帮你得到干净的原始JSON文本,之后就可以和处理普通JSON文件一样解析成Value了。

不推荐的手动处理方式

虽然可以手动去掉首尾的引号、替换\"为",但这种方法不够健壮——如果文本中存在其他转义字符(比如\n、\t)或者首尾有空格/换行,手动处理很容易出错,所以优先用serde的自动解析逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:43