問題タブ [argonaut]
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 - Argonaut を使用して JSON を検証および解析する
JSON を解析して Scala インスタンスまたはエラー JSON にする必要があります。
たとえば、次の JSON:
があり、3 未満であってはならない
{"user":"us","password":"pass"}
制約があるとします。次に、次のエラー JSON を取得する必要があります。"user"
{"user":"us", "_error_user":"Username length shouldn't be less than 3","password":"pass"}
しかし、JSON の{"user":"user","password":"pass"}
場合、 のような Scala インスタンスを取得する必要がありますUser("user","pass")
。
Argonaut を使用することは可能ですか?
scala - Argonaut CodecJson とサブタイプのデコード
ArgonautDecodeJson
トレイトには、デコーダーを連鎖させる方法があり、|||
後続の最初のデコーダーが選択されます。同様の効果を持つ同様の方法もありDecodeResult
ます。一見すると、これらのうちの 1 つが、共通の特性の複数のサブタイプをデコードするために必要なもののように見えます。しかし、実際にこれを行うにはどうすればよいでしょうか。
最初の問題は、 への引数が、呼び出し先がデコードすることになっている型のスーパータイプをデコードする必要があることです ( についても同様です|||
) 。そのようなデコーダーは、共通のスーパータイプのすべてのサブタイプをデコードできると期待しているので、これは無限再帰のレシピのようです!DecodeJson
DecodeResult
スーパータイプasInstanceOf
の を定義する際に、次の醜いハックを使用してこれを回避できます。CodecJson
ただし、3 つ以上のサブタイプをデコードする場合は、まだ問題があります。サブタイプA
、B
およびC
があるとしFoo
ます。今何?このデコード式にさらに別の代替手段を追加するにはどうすればよいでしょうか? .asInstanceOf[DecodeResult[AnyRef]]
解析結果の型安全性を破壊しようとしています (この時点で型安全性を破棄していないかのように!)。そして、選択肢が 4 つ、5 つ、または 6 つあるとすぐに選択肢がなくなります。
EDIT : Argonaut を使用して 2 幅を超えるサブタイプ階層をデコードするための代替アプローチを回答として喜んで受け入れます。
json - Argonaut レンズを使用して数値 JSON フィールドを変更するには?
以下は、 Argonaut のレンズ ドキュメントの例の簡略版です。
数値フィールドで同様のことを行うにはどうすればよいですか? たとえば、上記1
の数値に加算して、次obj
の結果を得たいとします。
私の最初の試みは
しかし、この最後の行はコンパイルされません。
json - Argonaut in Play フレームワークで読み取りと書き込みを使用する
play アプリケーション用の play json ライブラリを使用して json 解析を行う方法を知っています。たとえば、次のコードがあります。
Play json の代わりに Argonaut を使用して Reads and Writes のようなコードを書くにはどうすればよいですか?
json - Scalaでは、コレクションのサブタイプに暗黙的な変換を適用する方法は?
アルゴナウトを使用して、オブジェクトのリストをjsonに変換しようとしています。リストには、さまざまなタイプの検証エラーのリストが含まれています。たとえば、' MissingParameter ' または ' InvalidParameter ' またはその他のタイプのインスタンスを含めることができます。上記の両方のクラスに EncodeJson (argonaut) コーデックを定義しました。上記のタイプのリストをアルゴナウトを使用して json に変換する方法はありますか? つまり、次のことを達成できますか?