問題タブ [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 - serde が人間が読めるシリアライザーの 16 進文字列のみを生成するようにしますか?
現在serde-hexを使用しています。
次のエラーで失敗します:
ビンコードの 16 進文字列に値が展開されているためです。
serde_json と bincode の両方でシリアル化する必要がある多くの構造体があります。 serde_hex
JSONシリアライゼーションに必要なことを正確に行います。bincode serde-hex を使用すると、配列が 16 進文字列に変換されますが、これは望ましくありません。
secp256k1 が を使用しd.is_human_readable()
ていることに気付きました。
serde_hex
のみに適用しserde_json
て無視するにはどうすればよいbincode
ですか?
rust - JSON配列から遅延デシリアライズする方法は?
問題の説明
を使用serde_json
してオブジェクトの非常に長い配列を に逆シリアル化すると、Vec<T>
配列全体を前もってメモリに読み込む必要があるため、時間がかかる場合があります。代わりに、事前処理とメモリ要件を回避するために、配列内の項目を反復処理したいと思います。
これまでの私のアプローチ
StreamDeserializer
連続して配置された自己区切り型に対してのみ反復できるため、直接使用することはできません。だから私がこれまでに行ったことは、実装するカスタム構造体を作成しRead
、別の構造体をラップしますRead
が、開始と終了の大括弧、およびコンマを省略しています。
たとえば、リーダーは JSON[{"name": "foo"}, {"name": "bar"}, {"name": "baz"}]
を に変換して、{"name": "foo"} {"name": "bar"} {"name": "baz"}
で使用できるようにしStreamDeserializer
ます。
コード全体は次のとおりです。
次のように使用されます。
最後に質問です
これを行うにはもっと良い方法があるはずですよね?
rust - JSONをBox<[u8]>値を持つ構造に逆シリアル化する方法は?
「バイト」フィールドを含める必要がある構造体があり、JSON から逆シリアル化しようとしています。
を使用する&'a [u8]
と、これは機能しますが、この構造体とそれを囲む構造体にライフタイム アノテーションを追加する必要があります。
バイトを「所有」して囲みを使用することで回避できると思いましたBox
が、うまくいきませんでした。なぜそうでないのか、またはこれを機能させる方法 (serde 注釈、このフィールドのカスタムヘルパー、またはその他の方法) があるかどうかを理解しようとしています。
より具体的には、これは機能します:
そして、これはしません:
どちらの場合も、次のように呼んでいます。
(つまり as )Box
に置き換えるときに同じ問題が発生しましたVec
Vec<u8>
ソリューションで編集:
以下で @lpiepiora が指摘したように、これには追加のラッパーが必要です。serde_bytes
クレートによって提供される次のようなもの:
rust - Rust:ジェネリック型を持つ構造体のDeserializeを導出する方法は?
上記のコードはコンパイルに失敗し、未使用の有効期間パラメーターを訴えますが、それを削除すると、Deserialize
有効期間が失われます。
上記のコードは、ファントム マーカーまたは を使用せずに正しく作成できますかDeserializeOwned
?