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

Rust中如何正确解析带Unicode转义序列的JSON并得到目标格式字符串

问题解决方法
  • 首先避免对解析得到的字符串值重复执行serde_json序列化:你通过serde_json::from_slice解析JSON后,\u001f已经被正确解析为Unicode控制字符U+001F,再调用serde_json::to_vec会把控制字符重新按照JSON规范转义为\u001f,这是你得到不符合预期结果的核心原因。
  • 直接从serde_json::Value中取出原生字符串,再对字符串中的字符做格式化转义,输出Rust风格的\u{xx}表示即可。
use serde_json::Value;
use std::fmt::Write;

fn main() {
    let input = r#"{"a": "b\u001fc"}"#;
    let json: Value = serde_json::from_slice(input.as_bytes()).unwrap();
    
    // 直接取出解析后的原生字符串
    let raw_str = json.get("a").and_then(Value::as_str).unwrap();
    
    // 格式化得到Rust风格的Unicode转义字符串
    let mut result = String::new();
    for c in raw_str.chars() {
        match c {
            // 可打印ASCII字符直接输出
            ' '..='~' => result.push(c),
            // 非打印字符转成\u{xx}格式
            _ => write!(&mut result, "\\u{{{:x}}}", c as u32).unwrap()
        }
    }
    
    println!("{}", result); // 输出:b\u{1f}c
}

如果需要处理更复杂的转义场景,调整match分支的匹配规则即可满足需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:01