問題タブ [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.

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

scala - JSON構造に基づいてArgonautで封印された特性をデコードしますか?

次の例を考えます。

適切な構造を持つオブジェクトをデコードするCodecJsonforを記述する必要があります。Id

spray-json何らかの種類の識別子フィールドを追加することは、これに対する一般的な提案ですが、既に生成/消費している JSON を変更したくありませんjson4s

これらのライブラリでは、エンコーダー/デコーダーは基本的にPartialFunction[JValue, A]PartialFunction[A, JValue]. 値がドメインで定義されていない場合、それは失敗です。これは本当にシンプルでエレガントなソリューションだと思います。それに加えて、JSON タイプのエクストラクタがあるため、フィールド/構造でオブジェクトを簡単に一致させることができます。

Rapture はさらに一歩進んで、フィールドの順序を重要ではなく、一致しないフィールドの存在を無視するので、次のようにすることができます。

それは本当にシンプル/強力です。

で同様のことを行う方法がわかりませんargonaut。これは私がこれまでに思いついた最高のものです:

そのため、いくつかの問題があります。使用する予定のない追加のコーデックを定義する必要があります。EncodeJsonforで case-class エクストラクタを使用する代わりに、CodecJson[Id]定義した他のエンコーダに委任しています。ただ、フィールドが 2 つまたは 3 つしかないクラスでは、あまり単純でもきれいでもありません。

このセクションのコードDecodeJsonもかなり厄介です。ifEmptyの側に追加の型キャストがあることを除けばfold、 のコードと同じですDecodeJson.|||

誰かが、ディスクリミネーターを必要とせず、代わりにjsonの構造に一致できるアルゴナウトでSumタイプの基本的なコーデックを書くためのより慣用的な方法を持っていますか?

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

scala - `circe` 型レベル Json => 関数?

circeorを使用してargonaut、どのように書くことができますかJson => A(注 -Json型の名前ではないかもしれません) whereASSNクラスによって与えられます:

?

擬似コード:

// assuming this function is named f

f(JsArray(JsNumber(1)))Aサイズが 1 であるため、にはなりませんが、

f(JsArray(JsNumber(1), ..., JsNumber(8)))===SSN(SizedList(1,...,8))

0 投票する
2 に答える
1793 参照

json - Argonaut または Circe を使用して不完全な JSON からケース クラスを更新する

DecodeJson不完全な json (一部のフィールドが欠落している) が与えられた場合、ケース クラス インスタンス (必要な s が暗黙的に派生したもの) から更新されたインスタンスを作成する必要があります。これは、Argonaut (できれば) または Circe (必要な場合) でどのように達成できますか?

例:

json を json AST に解析し、それを Shapeless に変換してからLabelledGeneric、何らかの方法で Shapeless update を使用してケース クラス インスタンスを更新する必要があると確信しています。


編集 2

Shapeless ソースを読んだ後、独自の「デフォルト」オブジェクトを生成できることがわかりました。JSONの解析中にケースクラスのインスタンスが存在することを必要とするソリューションを作成することができました。これを回避し、代わりにインスタンスを後で提供することを望んでいました。とにかくここにあります:

これにより が得られPerson(Old Name Kept,42)ます。

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

json - Argonaut: 多相配列のデコード

私が書き込もうとしている JSON オブジェクトにDecodeJson[T]は、さまざまな「タイプ」の配列が含まれています (つまり、その要素の JSON 構造はさまざまです)。唯一の共通点はtype、タイプを区別するために使用できるフィールドです。他のすべてのフィールドは異なります。例:

Arnaut を使用して、JSON 配列を Scala にマップすることは可能 ですか?ここでSeq[Element]、 typeなどElementの適切なケース クラスのスーパータイプです。ElementAElementB

私は で同じことをしplay-jsonましたが、それは非常に簡単でした (基本的にReads[Element]、フィールドを評価し、typeそれに応じてより具体的な に転送するa Reads)。しかし、アルゴノートでこれを行う方法が見つかりませんでした。


編集:例

Scala タイプ (使用したい):

JSON インスタンス (私の管理下にありません):

0 投票する
2 に答える
425 参照

scala - akka `HttpResponse` を Argonaut `Json` としてマーシャルする

私はakkaHttpResponseを次のようにマーシャリングしようとしています:

このインスタンスの Argonaut を作成すると、次のEncodeJsonようになります。

ヘッダーをjsonとしてマーシャリングすることができました。唯一の問題は本体、つまりResponseEntity. これは akka ストリームなので、使用すると未来しか返されません.toStrict

どのようにマーシャリングするかについて誰かが私を導くことができますか?

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

purescript - Affjax Respondeable のための Purescript 再利用 Argonaut JSON デコード

Haskell サーバーから JSON データをフェッチしようとしていますが、Respondeable インスタンスだけでなく、一般的な Affjax にも問題があります。EncodeJson + DecodeJson を Data.Argonaut.Generic.Aeson (GA) で定義しましたが、それを Respondeable インスタンスに適合させる方法がわかりません。それは fromResponse 関数です。

「Foreign 型と Json 型を一致させることができませんでした」というエラーが表示されますが、手動で何かを作成しなくても、decodeJson インスタンスを再利用できますか? おそらく IsForeign インスタンスを作成することによって、しかしその中で GA.decodeJson を使用することでしょうか? どうすればいいのかわかりません。https://github.com/purescript/purescript-foreign/blob/master/examples/Complex.pursで手動で行う方法を見てきましたが、Haskell JSON 出力と一致させる必要がある複雑な型があります。手動で行うのは非常に面倒です。

私は purescript 10.7、Affjax 3.02、Argonaut 2.0.0、Argonaut-generic-codecs 5.1.0 を使用しています。ありがとう!