問題タブ [json-deserialization]
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.
json - JSONでのデシリアライズとシリアライズとは何ですか?
JSON で「デシリアライズ」と「シリアライズ」という用語を見てきました。彼らはどういう意味ですか?
c# - 配列の場合もあればオブジェクトの場合もある JSON のデシリアライズ
JSON.NET ライブラリを使用して Facebook から返されたデータを逆シリアル化するのに少し問題があります。
シンプルなウォール投稿から返される JSON は次のようになります。
写真に対して返される JSON は次のようになります。
すべてがうまく機能し、問題はありません。次の JSON を持つモバイル クライアントからの単純なウォール ポストに出くわしました。この 1 つのポストで逆シリアル化が失敗するようになりました。
これが私がデシリアライズしているクラスです:
FacebookMediaJsonConverter を使用しないと、エラーが発生します: JSON オブジェクトを型 'System.Collections.Generic.List`1[FacebookMedia]' に逆シリアル化できません。JSON では Media はコレクションではないため、これは理にかなっています。
同様の問題を説明しているこの投稿を見つけたので、次のルートをたどってみました: JSON をデシリアライズします。値が配列の場合もあれば、"" (空白の文字列) の場合もあります。
私のコンバーターは次のようになります。
新しい例外が発生することを除いて、これは正常に機能します。
JsonSerializerInternalReader.cs、CreateValueInternal() 内: オブジェクトの逆シリアル化中に予期しないトークン: PropertyName
reader.Value の値は「permalink」です。JsonToken.PropertyName のケースがないことがスイッチではっきりとわかります。
コンバーターで別の方法で行う必要があることはありますか? 助けてくれてありがとう。
php - PHPで文字列がJSONかどうかを確認する最速の方法は?
文字列が JSON かどうかを非常に高速に確認する方法が必要です。これは最善の方法ではないように感じます:
この方法を改善したいパフォーマンス愛好家はいますか?
java - GSON 大文字と小文字を区別しない列挙型の逆シリアル化
私は列挙型を持っています:
そしていくつかの JSON:
そしてクラス:
JSON を逆シリアル化しようとすると、GSON を使用して type フィールドを受信null
しEvent
ます。これは、JSON の type フィールドの大文字と小文字が enum の大文字と小文字が一致しないためです。
列挙型を次のように変更すると、すべて正常に動作します。
ただし、列挙定数はすべて大文字のままにしたいと思います。
アダプターを作成する必要があると思いますが、適切なドキュメントや例が見つかりません。
最善の解決策は何ですか?
編集:
JsonDeserializer を機能させることができました。ただし、列挙値と JSON 文字列の間に大文字と小文字の不一致があるたびにこれを記述しなければならないのは残念なことなので、これを記述するより一般的な方法はありますか。
java - VALUE_STRINGからjava.util.ArrayListのインスタンスを逆シリアル化できません
ジャージーで構築され、AppEngineにデプロイされたRESTサービスがあります。RESTサービスは、application/json
メディアタイプを消費する動詞PUTを実装します。データバインディングはJacksonによって実行されます。
動詞は、JSONで次のように表される企業と部門の関係を消費します
クライアント側では、gsonを使用してJSON表現をJavaオブジェクトに変換します。次に、オブジェクトをRESTサービスに渡すと、正常に機能します。
問題:
JSON表現のコレクションにアイテムが1つしかない場合
サービスはオブジェクトを逆シリアル化できません。
他のユーザーから報告されているように、解決策はフラグを追加することですACCEPT_SINGLE_VALUE_AS_ARRAY
(たとえば、Jersey:ArrayListのインスタンスをStringから逆シリアル化することはできません)。ObjectMapper
それにもかかわらず、サービス側ではジャクソンによって透過的に作成されているため、私は制御していません。
質問:
ObjectMapper
有効にするようにサービス側でを構成する方法はありますACCEPT_SINGLE_VALUE_AS_ARRAY
か?注釈?web.xml
?
コードの詳細
Javaオブジェクト:
RESTサービス側:
クライアント側:
c# - JSON.NET を使用して、場合によってはオブジェクトであり、場合によってはオブジェクトの配列である値を処理するにはどうすればよいですか?
この質問のstackoverflowには他にもいくつかの結果があることに気付きましたが、それらは機能していないようであるか、あいまいです。最も人気のある結果を使用して、これをまとめました。
問題は、JSON が戻ってきて、カスタム型の 1 つにシリアル化されているときに、JSON のビットの 1 つが配列である場合もあれば、単なる文字列である場合もあるということです。カスタム型に文字列があり、JSON が配列の場合、エラーが発生します。JSON がオブジェクトで、カスタム型が配列の場合、同じことが逆に起こります。それをプロパティにマップすることはできません。
私はこれを解決することにしました。この特定のプロパティの逆シリアル化をオーバーライドしたいと思います。オブジェクトの場合は、1 つのオブジェクトの配列に変換したいと考えています。
シリアル化するオブジェクトに、逆シリアル化の方法をオーバーライドすると思われる JsonConverter を追加しました。
アイデアは、カスタム コンバーターが単一のオブジェクトを配列に変換するというものです。したがって、JSON が「Hello」の場合、文字列をリストに変換できないという例外をスローする代わりに、「Hello」を含むリストに person を設定します。
すでに配列である場合は、そのままにしておく必要があります。
コンバーターは次のようになります。
うまくいきません。上記のコードは、単一の文字列を逆シリアル化しようとして、if ステートメント内でリストにキャストできないことを示す例外をスローします (ただし、「objecttype」はリストです)。
読み取りメソッドと書き込みメソッドが何をしているのかを正確に理解するのに苦労しています。stackoverflow に関する他の回答でNotImplementedException
は、読み取りメソッドで a をスローすることを提案しています。しかし、そうすると、read メソッドが呼び出され、例外がスローされます。
私は正しい道を進んでいると思いますが、正しい方向への微調整が必要です。ReadJSon メソッドが何をしているか、およびそのパラメーターが何を意味するかについて、少し混乱していると思います。
Deserialize メソッドの呼び出しで値を指定しなかったため、逆シリアル化されている値がどこから来ているのかよくわかりません。
私はこれについて私の深さから少し外れています。
c# - 方法: JSON 逆シリアル化
私はC#でこれをデシリアライズする方法を見つけようとしていますが、残念ながら運がありません.
誰かが助けてくれれば本当にありがたいです.jsonデータは次のとおりです。
}
編集:jsonデータを変更しました
c# - Twitter API 1 から 1.1 への Rss から Json への変換 - C# を使用した WPF アプリケーション
twitter はまもなく API バージョン 1 を廃止するので、古いアプリケーションを変換して、新しい 1.1 API で動作できるようにすることにしました。1.1 について私が知っていることから、呼び出しを行う前に認証を行い、データをシリアル化するために RSS ではなく JSON を使用する必要があることがわかっています。アプリケーションは、xmal と c# を使用して WPF でコーディングされています。
LINQ to Twitter Library を使用して正常に認証できましたが、JSON の使用に関してはわかりません。API v1に使用したコードは次のとおりです
そして、これがつぶやきクラスのコードです
誰かがこれに相当する JSON を書くための正しい方向に私を向けることができるかどうか疑問に思っていました. 前もって感謝します!
java - 特定のフィールドが存在する場合、Jackson ポリモーフィック デシリアライゼーションを使用してサブタイプにシリアル化できますか?
動物園の例でスピンを使用します。
Animal
ウィングスパンが指定されていない場合はインスタンスを構築し、指定されている場合はインスタンスを構築するためにポリモーフィックデシリアライゼーションを使用したいと考えてBird
います。Jackson では、通常、型指定されていないデシリアライゼーションは次のようになります。
wingspan の値は何でもかまいませんが、具体的に一致するものがない場合、Jackson は defaultImpl クラスにフォールバックします。
私はおそらく使用できます@JsonCreator
:
ただし、余分な値を手動で処理し、一貫した例外をスローする必要があり、Animal
後で適切にシリアル化されるかどうかは明確ではありません。
独自のTypeResolver
orを使用できるようですTypeIdResolver
が、生の json を自分で逆シリアル化するよりも手間がかかるようです。さらに、本質的に型情報がシリアル化されていると想定しているようTypeResolver
にTypeIdResolver
見えるため、それらは使用するのに適していません。
JsonDeserializer
タイプを指定するためにライフサイクルにフックする独自のものを実装することは可能でしょうか?ただし、基本的な Jackson アノテーション処理機能を引き続き使用しますか? を見てきましたが、JsonDeserializer.deserializeWithType(...)
逆シリアル化を完全にに委任しているようTypeDeserializer
です。使用するタイプを知る前に、オブジェクトの一部を逆シリアル化する必要があるという問題もあります。
または、親オブジェクトにある場合でも、動物園のペンのタイプをターゲットにする方法があるかもしれません。
ポリモーフィック型の処理で私がやりたいことをする方法はありますか?
java - Json 配列から Java クラスへ (Gson でデシリアライズ)
Json 応答 (jsonResultAsText という名前) があります。
Google の gson ライブラリを使用してデシリアライズしたいと考えています。
私は次のようなクラスを持っています:
JsonResponse クラスに json データを取得したい。
それは私が達成しようとするコードです:
しかし、私の Android アプリケーションでは、その古典的なエラーが発生します: 残念ながら、< app_name > が停止しました。
gson クラスを介したシリアル化/逆シリアル化に関する例がたくさんあることは知っていますが、同様の問題/例は見つかりませんでした。
前もって感謝します。