問題タブ [serde-json]
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.
rust - すべてではなく特定の入力タイプに対して Deserialize 実装をカスタマイズするにはどうすればよいですか?
私の実際の型はより大きく、より複雑ですが、私はこのような型を持っています:
この型を実装Deserializeすると、serde は次のようなものを探します (JSON に興味があります)。
バイト配列からも逆シリアル化できるようにカスタマイズしたいと思います。
配列を処理する impl を作成できますが、serde で残りを自動生成する必要があります (これは になりますvisit_map)。
それは可能ですか?この例では難しくありませんが、構造体が大きい場合、手書きのデシリアライズは面倒です。
これは、Serde を使用して逆シリアル化中にフィールドを変換する方法の複製ではありませんか? deserialize_with1つのフィールドでのみ機能するためです。私の本当のタイプでそれをどのように機能させるか理解できません:
私がやりたいことは次のとおりです。
- 逆シリアル化中に、入力が数値の場合は を返します
Component::String。visit_iこれは/u/f64と友達と一緒に行うことができます。 - 入力が文字列の場合は、
Component::String再び a を返します。visit_strこれは/で実行できますstring。 - input が array の場合
[..]、通常どおりデシリアライズしますが、array[1..] の要素を array[0] の extra に割り当てます。これは によって行うことができますvisit_seq。 - 入力がマップの場合は、serde 派生に処理させます。
json - 階層内の JSON オブジェクトを反復する方法は?
name階層の奥深くにあるオブジェクトの各連絡先を出力したいと考えています。連絡先オブジェクトは、適切な構造を作成するために毎回正確に同じ数のフィールドを持つとは限りません。どうすればこれを達成できますか?
私は Rust に非常に慣れておらず、基本的に JavaScript のバックグラウンドから来ています。
json - すべてのフィールドがデフォルト値である型を代わりに None として逆シリアル化するにはどうすればよいですか?
JSON blob を逆シリアル化する必要があります。場所によっては、オブジェクト全体が存在しない場合、同じ構造を持つオブジェクトとしてエンコードされますが、そのすべてのフィールドは既定値 (空の文字列とゼロ) に設定されます。
逆シリアル化の後にこれを処理しますが、ご覧のとおり、このアプローチは列挙値には使用できません。空の文字列に一致するバリアントがないため、逆シリアル化は完全に失敗します。
これをセルデに教えるにはどうすればよいですか?
rust - 同じ Serde フィールドに対して複数の逆シリアル化名を受け入れるにはどうすればよいですか?
Serde を使用して、次の構造体に基づいてJSON ( serde-json) および XML ( ) ファイルを逆シリアル化しようとしています。serde-xml-rs
逆シリアル化しているフィールドの名前は、ファイルの種類によって異なります。この場合、JSON ファイルにcubesキューブのリストを含むキーを持たせたいのですが、XML で同等のものは複数の<Cube />要素になります。
cubesと の両方をCube逆シリアル化のキーとして受け入れる方法がわかりません。私が見つけた最も近いものは#[serde(rename = "Cube")]オプションでしたが、それを使用すると、キーのみを受け入れるため、JSON デシリアライゼーションが機能しなくなりCubeます。そのオプションを削除すると、XML デシリアライゼーションcubesはキーとしてのみ受け入れられるため、機能しなくなります。
Serdeでこれを達成する簡単な方法はありますか?