問題タブ [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 に答える
1228 参照

json - JSON 配列からキーのサブセットを選択する

次のような出力を吐き出す JSON API を解析しようとしています。

ソース: http://api.open-notify.org/astros.json

私はこれにserdeを使用しており、これまでに次のコードを思い付くことができました:

さて、ppl_value_space予想通り、これを取得します:

"name"しかし、本質的に次のようなものを持っているので、私は鍵に到達したいと思います:

現在宇宙にいる宇宙飛行士の名前だけを取得できるように。

なしで"name"内を取得するにはどうすればよいですか?"people""craft"

私はそうしようとしましnameた:

しかし、それはパニックで終わります。これは基本的に、キーがNoneunwrap()あることを意味しますOption<T>

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

json - serdeのrustc_serialize::Jsonに相当するものは何ですか?

serde ライブラリはrustc_serialize の代わりになるので、それで動作するようにライブラリをリファクタリングしようとしています。対応するタイプが何であるかわかりませんrustc_serialize::Json。json を受け入れるメソッドがあるとします。

対応するものは何serde_jsonですか? これですか:

またはこれ:

または、他の何か?

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

json - serde_json - 構造体を / から json に変換可能にする方法は?

serde_json のドキュメントを見ると、構造体を json にシリアライズ可能およびデシリアライズ可能にするために実装する必要がある特性を理解できません。明白な答えはDeserializerandかもしれSerializerませんが、これらは構造体であり、特性ではありません。

rustc-serialize私は実装することができToJsonFromJson特性。

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

json - JSON のフィールドに基づいて JSON を条件付きでデコードする

API から JSON を受信して​​いますが、応答は 30 種類のいずれかになります。各タイプには固有のフィールド セットがありますが、すべての応答には、typeそれがどのタイプであるかを示すフィールドがあります。

私のアプローチはserdeを使用することです。応答タイプごとに構造体を作成し、それらをデコード可能にします。それができたら、新しく受信したメッセージに使用する構造体を選択するにはどうすればよいですか?

現時点では、TypeStruct1 つのフィールドのみを持つ別の構造体を作成しましたtype。JSON を にデコードし、TypeStruct型の値に基づいて受信メッセージに適切な構造体を選択し、メッセージを再度デコードします。

このデコードの重複を取り除きたいと思います。

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

json - serde_jsonでイテレータをエンコードする慣用的な方法は何ですか?

Rust で結果を JSON 文字列としてエンコードしようとしてdrain()います。vecこれを行うための最良の慣用的な方法は何ですか?

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

json - エラー: この値の型は、このコンテキストで既知でなければなりません (Rust) / serde_json 値

serde_json を使用して json ドキュメントを逆シリアル化しています。文字列(これはjsonドキュメントです)を指定すると、serde_json値(これはjsonタイプを表す列挙型)を返し、オプションを返す関数があります。この値は、必要に応じて他の関数に渡されます。

ただし、値を渡すことは、私が望んでいるものではないことに気付きました。これを行うと、キーが利用できないためです。

私の要点を説明するために、次のような json ドキュメントがあるとします。

"root" は json オブジェクト、"regex" は json Null、"prefixes" は json 配列です。

ここで、json 型の Value は、json 型を表す識別子を持つ列挙型です。たとえば、上記の例では Object、Null、Array です。

serde_json クレートは std::collections::BTreeMap を使用して json ドキュメント内のノードを表し、String 型は json キーを表します (上記では、これらは「ルート」、「正規表現」、および「プレフィックス」になります。 Values への参照だけでは部分的にしか役に立ちません。キーにもアクセスできるように、代わりに BTreeMap を渡す必要があります。

したがって、これは私が書き直そうとしている次の関数です。

そのため、関数を書き直し始めましたが、「この値の型は、このコンテキストで既知である必要があります」というエラーに直面しました。

このようなスタックオーバーフローに関する他の質問を見つけました: この値のタイプは、このコンテキストで既知である必要があります

これをヘルパーとして使用して、次のように型を挿入しようとしました:

これは問題を解決しません。また、他の同様のバリエーションを試してみましたが、役に立ちませんでした。では、どうすればこれを修正できますか?

編集:

このアプリには次のような別の機能があります。

...そしてこれはうまくいきます。ここでは、as_object() を呼び出して、キーと値をタプル ペアとして取得できることがわかります。as_object があるケースでは機能しているのに、別のケースでは機能していない理由がわかりません。BTreeMap を取り出して、これを借用アイテムとして渡したいと思います。