Rust中将base64解码的原始转义字符串转为serde_json可用格式的最优方案?
最优实现方案
你拿到的raw变量本质是经过一次JSON序列化的字符串值,所以最稳妥、无边界问题的方案是直接用serde_json反序列化一次即可,完全不需要手动处理转义字符和切割字符串:
use serde_json; fn format_string(inp: &str) -> Result<String, serde_json::Error> { // 直接把输入的转义字符串反序列化为原始字符串 serde_json::from_str(inp) }
调用示例:
fn main() { let raw = r#""{\"foo\":1,\"bar\":\"first\"}""#.to_string(); let converted = format_string(&raw).unwrap(); // converted 输出为 {"foo":1,"bar":"first"},可以直接传给serde_json做后续JSON解析 }
原有实现的优化方案
如果你确实不想用serde_json做这一步处理,可以优化你现有的手动处理逻辑,避免手动切片的索引越界风险:
fn format_string(inp : &str) -> String { inp.replace("\\\"", "\"") .trim_matches('"') // 自动移除首尾所有双引号,比手动切片更安全 .to_string() }
方案对比
- 手动处理的方案性能略高,但仅适用于你明确输入格式完全符合预期的场景,如果输入中存在复杂转义序列可能会处理错误
- 基于serde_json反序列化的方案完全遵循JSON规范,兼容所有合法的转义场景,不会出现解析错误,是更通用的选择
内容的提问来源于stack exchange,提问作者Nikita Zhavoronkov
相关产品推荐
相关产品推荐

