0
私はAPIラッパーを開発していますが、空のJSONオブジェクトの逆シリアル化にはいくつか問題があります。Serdeのデフォルト実装を、nullではなく空のオブジェクトを返すように変更するにはどうすればよいですか?
APIはこのJSONオブジェクトを返します。 entities
で空のオブジェクトをマインド:
message
プロパティ(
編集した)の私の同等の構造体である
{
"object": "page",
"entry": [
{
"id": "1158266974317788",
"messaging": [
{
"sender": {
"id": "some_id"
},
"recipient": {
"id": "some_id"
},
"message": {
"mid": "mid.$cAARHhbMo8SBllWARvlfZBrJc3wnP",
"seq": 5728,
"text": "test",
"nlp": {
"entities": {} // <-- here
}
}
}
]
}
]
}
:
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct TextMessage {
pub mid: String,
pub seq: u64,
pub text: String,
pub nlp: NLP,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct NLP {
pub entities: Intents,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Intents {
intent: Option<Vec<Intent>>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Intent {
confidence: f64,
value: String,
}
Serdeのデフォルトは::serde_json::Value::Null
で、None
あるOption
Sを、デシリアライズすることです。
JSONオブジェクトを表すのになぜVecを選択したのですか?これらの価値がどのように移転すると思いますか?実際、API **が常にオブジェクト(または配列)を返す場合、なぜ構造体に 'Option'があるのでしょうか? – Shepmaster
あなたは構造体の構造が間違っています。私はコードを編集した – kper