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

如何在serde_json中避免或移除JSON字符串的转义引号?

解决serde_json::json!生成JSON时出现多余转义引号的问题

问题根源

你遇到的问题本质是传入的字符串本身包含双引号(比如实际传入的token是"\"foo\""而非"foo"),serde_json会严格按照JSON标准序列化字符串,因此会对原字符串中的引号进行转义,最终输出的JSON值就会呈现为"foo"(对应原始字符串"\"foo\""的序列化结果)。

解决方案

核心思路是在构建JSON之前,先去除输入字符串两端的多余引号。以下是两种可行的实现方式:

方式1:在json!宏内直接处理

直接在构建JSON对象时,对输入字符串做去引号处理:

use serde_json::{json, Value};
use log::info;

fn create_cache_json(token: String, change: String, payload: Vec<Value>) -> Value {
    // 辅助函数:去除字符串两端的双引号,同时清理前后空白
    let strip_surrounding_quotes = |s: &str| {
        let trimmed = s.trim();
        trimmed.strip_prefix('"')
            .and_then(|s| s.strip_suffix('"'))
            .unwrap_or(trimmed)
    };

    let json = json!({
        "token": strip_surrounding_quotes(&token),
        "change": strip_surrounding_quotes(&change),
        "data": {
            "payload": payload
        }
    });

    info!("{}", json);
    json
}

fn main() {
    // 模拟带引号的输入场景
    let token = "\"foo\"".to_string();
    let change = "\"new\"".to_string();
    let payload: Vec<Value> = Vec::new();

    create_cache_json(token, change, payload);
}

方式2:提前预处理输入

如果所有输入字符串都存在多余引号,可以在传入函数前先处理:

use serde_json::{json, Value};
use log::info;

fn create_cache_json(token: String, change: String, payload: Vec<Value>) -> Value {
    let json = json!({
        "token": token,
        "change": change,
        "data": {
            "payload": payload
        }
    });

    info!("{}", json);
    json
}

fn main() {
    let raw_token = "\"foo\"".to_string();
    // 去除两端的双引号和空白字符
    let token = raw_token.trim().trim_matches('"').to_string();

    let raw_change = "\"new\"".to_string();
    let change = raw_change.trim().trim_matches('"').to_string();

    let payload: Vec<Value> = Vec::new();

    create_cache_json(token, change, payload);
}

注意事项

不要试图让serde_json跳过引号转义——这会破坏JSON的语法规范,导致生成的JSON无法被其他解析器正常读取。正确的做法始终是先确保输入数据符合预期格式,再进行序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:38:12