問題タブ [play-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.
scala - カスタム コンバーター関数を使用して Json ケース クラス マッパーを再生する
私はこのようなjsonを持っています。
play フレームワークを使用して scala ケース クラスを使用する同じオブジェクト マッパーが必要です。単純なクラスの変換を書くことができます。JsPath \ "key5"
ただし、以下のコードに示すように、内部で jObject のインスタンスを取る getMap クラスで提供されるカスタム機能がいくつかあります。私の方法ではこれを達成できないように見えるので、これを実装するにはどうすればよいですか。
json - 複数のタイプのジェネリック JSON シリアライゼーション
SOAP サービスを呼び出す Play API を構築しています。これが、プロバイダーが提供した唯一の通信メカニズムです。そのサービスは、次のように「パッケージ」のリストを返します。
このサービスはパッケージの一般的な構造を返しますが、API コンシューマーの場合、このアプローチは機能しないため、API は次のようにすべてのパッケージが修飾された JSON を返します。
そのため、Play ではモデルを次のように定義しました。
私たちは、大まかに6つまたは7つのタイプがあることを知っています. わかりやすくするために、3つ含めています。そのタイプのいくつかは「オプション」のみを持ち、一部は「タイプ」のみを持ち、2 つの特定のケースにはそれらの両方があることに注意してください。トレイトを使用してPackage
、あらゆる種類のパッケージの構築と具体的なケース クラスを一般化します。
したがって、Package の Type を識別する唯一の方法は、Package メタデータに存在するid
とを使用することです。subId
構造を構築するために、その型を返すすべての具体的な型の関数を作成し (ジェネリックを受け取る関数はオブジェクトをPackageDTO
返しPackage1
、ジェネリックを受け取る関数はオブジェクトをPackageDTO
返すPackage2
など)、関数を返し、条件を評価して種類を決定します。パッケージの:
したがって、次のように変換関数を呼び出します。
そして、(すべてのパッケージに対して) a を取得しList[Package]
ます。私たちの本当の問題はここから始まります...
問題
PackageMetadata
、PackageType
、 、タイプのすべての JSON リーダー/ライターがありますPackageOption
が、Trait ( ) のリーダー/ライターを記述できないため、目的の JSON 構造にPackage
変換できません。List[Package]
質問
すべてのタイプのパッケージを知ることができるJSON構造に変換する「一般的な」方法はありますか? List[Package]
以前に指定したように、JSON 構造で (Package, Package, ...) get (Package1, Package2, ...) を取得します。
Shapeless と HList で考えていますが、それを使用するアプローチを変更する方法がわかりません。
前もって感謝します!
json - JsArray から Json 属性値を抽出する ( play )
以下は私のscalaコードのスニペットです。私はプレイ2.4を使用しています。以下は私の「メッセージ」valの出力です。
出力:
["{\"id\":1,\"createdAt\":\"2015-11-11T16:18:58.789\",\"collectorId\":4}", "{\"id\":5 ,\"createdAt\":\"2015-11-11T22:35:52.300\",\"collectorId\":5}", "{\"id\":2,\"createdAt\":\"2015 -11-11T16:21:05.377\",\"collectorId\":4}", "{\"id\":3,\"createdAt\":\"2015-11-11T22:35:20.408\" ,\"collectorId\":2}", "{\"id\":4,\"createdAt\":\"2015-11-11T22:35:38.602\",\"collectorId\":4}" ]
ListBuffer()
抽出方法
「コレクターID」
Seq[Int] としての値。コードを実行すると、ListBuffer() として取得されます。
JsArray の代わりに JsObject が必要であることがわかりました。
サポートしてくれてありがとう。これが私が問題を解決する方法です。
scala - Play-Json の日時文字列を Reads[Instant] に解析する
format を使用して、入力 Json のタイムスタンプにタイムゾーンを指定する必要があるという検証ルールを適用しようとしていますDateTimeFormatter.ISO_OFFSET_DATE_TIME
。入力が間違っている場合、不正な形式を示すメッセージを返したい。
このスニペットは、期待される形式でデータを解析するために機能します。
DateTimeParseException
ただし、フォーマットが間違っている場合は スローします。
JsError("Wrong datetime format")
例外をスローする代わりに戻るように修正するにはどうすればよいですか?
json - Play フレームワークの JSON 変換
Play JSON ライブラリを使用して、Json との間でオブジェクトをシリアライズおよびデシリアライズすることを計画しています。私はこのようなケースクラスを持っています:
事実上 Seq[MyCaseClass] である JSON 文字列を返すサービスがあります。この String を JsValue に入れることはできますが、この JsValue を MyCaseClass に変換するにはどうすればよいでしょうか?
助言がありますか?
json - List[JsResult[A]] を JsResult[List[A]] にシーケンス化する
Json からケース クラス (およびその逆) への多くのマッピングを含むストライプ用の API を作成しようとしています。最終的に a になるという問題に遭遇しましたList[JsResult[A]]
(これは、JObject のリストを介してマッピングし、それらに対していくつかの操作を実行して、それらを適切なケース クラスにマップした結果です)。問題のコードは以下です
jsResults のタイプは ですがList[JsResult[A]]
、読み取りで適切に構成するには、 aJsResult[A]
または a のいずれかを返す必要がありJsError
ます。
Json.fromJson[Card](jsObject).get
の代わりに実行することもできますがJson.fromJson[Card](jsObject)
、そうすることは、Play Json で累積的なエラー処理を失うことを意味します (エラーをランタイムにプッシュすることも意味します)。