問題タブ [serde]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3709 参照

struct - キー名に基づいて列挙バリアントに逆シリアル化する方法は?

私は2つの形式をとるJSONを持っています:

次のような構造体にデシリアライズしたい:

どこ

用のカスタムデシリアライザーを書かずにそれを行う方法がわかりませんExample

これは機能します:

または、YAML では:

書くのan_enumは不必要で面倒です。最初のフォームを構造体に逆シリアル化するにはどうすればよいですか? または、代わりに、必要な構文を正常に逆シリアル化する構造体をどのように宣言できますか?

0 投票する
1 に答える
659 参照

rust - FromForm 内で JSON を逆シリアル化する場合の有効期間

このコードのライフタイム間の関係を理解するのに苦労しています。x-www-form-urlencoded基本的に、キーが 1 つだけのデータを受け取る Rocket API がありますjson。このキーには、直観的に、パーセントエンコーディングでエンコードされた struct の JSON 値が含まれていますMessage<T>

(これが次善の API 設計であることは承知していますが、これはリバース エンジニアリング作業であるため、選択の余地はありません)

として簡単にリクエストガードとして使えるようにFrom<Message<T>>、 を実装してFromFormいます。そのためには、FromForm<'f>あらゆるMessage<T>場所にT実装する必要がありますDeserialize<'de>。impl 署名を として書きましたimpl<'f, 'de, T> FromForm<'f> for Message<T> where T: Deserialize<'de>

実際にデコードを実行するには、次のようにします。

  1. "json"フォーム データのキーを取得します。
  2. 値を URL デコードします。
  3. 値に含まれる JSON を解析します。

できるだけ早く救済します。それを行うコード (読者の便宜のための明示的な型注釈):

貼り付けて実行する方法で問題を示す Gist (Playground は Rocket に依存しているため、Playground では機能しません)。

私が理解しているように:

  • &RawStrof にencodedはライフタイムがあります'f
  • AStringは によってそれから作成されurl_decode、関数の最後まで存続します
  • serde_jsonと一致する必要のない&'x str場所を取り、値を返します(したがって、関数の最後まで存続し、返されるため、それを超えて移動されます)'x'de

しかし、私の理解は間違っているようです:

何が間違っているのですか?どうすればデシリアライズされた値を適切に返すことができますか?