我已经在这上面花了近一个小时,所以这是一个真正的碰壁 case .
由于我无法控制的原因,我正在使用的一个内部服务为我提供了如下形式的JSON
let dirty_string = r#"\"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":\\\"val2\\\"}\""#;
显然,这看起来不太对劲.我的计划是使用serde_json
来构造适当的 struct ,但这不起作用.
我已经try 了各种方法来删除多个转义.
我try 过使用各种形式的替换
这
let to_format = dirty_string.replace("\\\\", r#""#);
个
给出了这个
"\\\"{\\\"key1\\\":\\\"val1\\\",\\\"key2\\\":\\\"val2\\\"}\\\""
基本上让事情变得更糟
这 let to_format = dirty_string.replace("\\", r#""#);
给出了这个
"\"{\"key1\":\"val1\",\"key2\":\"val2\"}\""
个
它看起来就在那里,但并不起作用,因为当我试图将其解析到 struct 中时,它失败了
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
struct Parsed {
key1: String,
key2: String
}
let to_struct: Parsed = serde_json::from_str(&to_format).unwrap();
dbg!(to_struct);
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("invalid type: string \"{\", expected struct Parsed", line: 1, column: 3)', src/main.rs:440:62
stack backtrace:
0: rust_begin_unwind
所以我真的很感谢你们的帮助.
我如何才能成功地删除这个恼人的反斜杠,使其成为有效的json字符串,然后我可以将其解析为 struct .