我已经读过the docs,但是还没有找到解决问题的方法。我正在解析一个API响应,该响应成功后将仅返回2xx状态代码,而在错误请求时将发送JSON。
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
fn main() {
let _: X = serde_json::from_str(r#"{ "ok": true }"#).expect("with string");
let _: X = serde_json::from_str("").expect("empty string");
}
#[derive(Deserialize)]
struct X {
ok: Option<bool>,
}
这是我想反序列化的结构。我尝试将#[serde(skip_serializing_if = "some_func")]
添加到该字段中,但没有任何改变。
错误是
Error("EOF while parsing a value", line: 1, column: 0)
是否有办法正确处理此问题,或者在尝试反序列化响应之前是否总是需要检查状态码是否为2xx?
答案 0 :(得分:1)
这里的主要问题是,根据大多数解析器,包括内置于ES6和显然是Serde的解析器,空字符串不是有效的JSON。对于这个问题,我有三种可能的解决方案。
Deserialize
方法