問題タブ [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 - Rapture JSON オブジェクトからタイプ、キー、および値を抽出する
Argonaut バックエンドでRapture JSONを使用しています (必要に応じて変更できます)。
任意の JSON 文字列が与えられた場合、理想的には各フィールドのタプル (fieldName、fieldType、fieldValue) のリストを取得するために、それをフラット オブジェクト (ネストされた JSON オブジェクトではない) として解析する必要があります。
更新: これは rapture -json でgithub の問題になりました
scala - Argonaut レンズを使用して JSON オブジェクトの JSON 配列から値を抽出する
アルゴノートを使用するのは初めてで、レンズについての知識はほとんどありません(十分な知識があります)。私はしばらく自分で問題を理解しようとしましたが、どこにも行きませんでした。
JSONからJsonArray(文字列の)を取得するレンズを構築しようとしています。配列を持つオブジェクトまで取得できますが、そこから何をすべきかわかりません。
JSON は次のようになります。
そして、これまでの私のレンズはこれです:
jArrayPL
それが正しいかどうかもわかりません。私がやりたいことは、配列からテキストを取得することです。
まとめとして、ハッシュタグを調べ、配列の各要素についてテキストを調べ、最終的に値をJsonArray
.
アップデート:
Travis の助けを借りて、次のコードをコンパイルしています。
残念ながら、実行時エラーが発生します:scalaz.Scalaz$.ToEitherOps(Ljava/lang/Object;)Lscalaz/syntax/EitherOps;
行から始まるval \/-(json) = Parse.parse(rawJSON)
前もって感謝します!
json - Argonaut では、Map(String->Any) のリストを json に変換するにはどうすればよいですか?
私にくれます
ただし、リストを再定義すると
できます。
scala - アルゴノートでデコードとエンコード
guildWars2 のパブリック API を使用して、いくつかの情報をデコードおよびエンコードしたいと考えています。アルゴナウトを使ったデコードとエンコードを探していますが、よくわかりませんでした。ありがとう
json - Argonaut を使用して公開 REST API を使用する
私はSprayとScalaが初めてです。私は現在、Guild Wars 2 の公開 REST API を使用しています。リソースを消費したいと考えています (「Bolt of Damask」という名前のアイテムのトレーディング ポストですべての売り注文と買い注文を収集するなど)。JSON のデコードには Argonaut を使用しています。
どうすればこれを達成できるかについて、誰かが私にいくつかの指針を教えてください。どうもありがとう。
scala - メソッド unmarshal の引数が不十分です: (暗黙の証拠 $1: Spray.httpx.unmarshalling.FromResponseUnmarshaller
この例に基づいて、SprayJsonSupport からアルゴナウトに渡します。いくつかのコード変更後:
このエラーが発生しました
エラー:(41, 42) 非整列化メソッドの引数が不十分です: (暗黙の証拠 $1: Spray.httpx.unmarshalling.FromResponseUnmarshaller[GoogleApiResult])spray.http.HttpResponse => GoogleApiResult. 指定されていない値パラメーターの証拠 $1。val パイプライン = sendReceive ~> unmarshal[GoogleApiResult] ^
unmarshall メソッドを見てみましょう。
暗黙的なパラメーターを追加するにはどうすればよいですか? そして、なぜ私は SprayJsonSupport でそのようなエラーが発生しなかったのですか?
を穴コード:
json - Argonaut を使用した JSON のストリームの解析
Argonaut を使用して、リモート JSON プロバイダーからオブジェクトを解析しています。API には 2 種類のエンドポイントがあります。1 つは、URL での従来の REST 要求と、単一の JSON オブジェクトの応答です。このタイプのエンドポイントで Argonaut を使用すると、複雑な JSON 戻りオブジェクトを簡単に解析できます。
私の問題は、プロバイダーのストリーミング エンドポイントにあり、これは特定のエンドポイントの制限付きセットの JSON からランダムな JSON オブジェクトを返します。オブジェクトは、サイトで発生した順序で返され、約 20 の異なるオブジェクトのいずれかがいつでも返される可能性があります。
API を調べてみると、Argonaut を使用してこの問題に対処する方法が見つかりません。API はすべて、次のオブジェクトの型を予測できない環境では困難な、型のパラメーター化を必要とするようです。1 つのオプションは、JSON の各ブロックの最初の数文字に基づいて異なるコーデックにディスパッチすることですが、これは、JSON 文字列をパーサーに送信し、代わりにオブジェクトを取得するという目標を台無しにします。
私がこれまでに見つけた最高のものは、すべてのトップレベルのケースクラスが空を拡張することですtrait
:
残念なことに、ModelSubclassA
両方ModelSubclassB
とも他のケース クラスにいくつかの関連付けがあり、この例はコンパイルされますが、実行時にこれらのサブタイプを解析しようとすると失敗します。全体として、返されるデータの階層を形成する数十のケース クラスがあります。
私もこれをfor
理解して構築しようとしましたが、運もありません。
ここでより良いパターンをアドバイスできる人はいますか?
アップデート
以下はよりスケーラブルなパターンを持っているようですが、型は連携していません:
エラー:(10, 17) タイプが一致しません。見つかった:argonaut.DecodeResult[ModelSubclassB] 必須:argonaut.DecodeResult[モデルでシリアライズ可能な製品] 注:ModelSubclassB <:モデルでシリアライズ可能な製品ですが、クラスDecodeResultはタイプAで不変です。代わりにAを+Aとして定義したい場合があります. (SLS 4.5) ||| c.as[ModelSubclassB]).asInstanceOf[デコード結果[モデル]] ^
そのため、ソースを調べ始めたところ、バージョン 6.2-M1 のエラーで示唆されているように、 の定義がDecodeResult
を含むように変更されていることに気付きました。+A
残念ながら、そのバージョンにアップグレードすると、すべてのModel
サブクラス コーデックがあいまいな暗黙に変わりましたが、これは理にかなっています。
うーん...
scala - Play フレームワークで再帰的にネストされた Json 構造を解析する
Play フレームワーク 2.3.4 を使用しています。API の 1 つからサードパーティ サービスへの Web サービス呼び出しを行います。返される応答の構造は動的であり、変更される可能性があります。応答 JSON 内で静的な部分構造のみが特定の要素であり、その中にネストされています。例えば
応答構造がどのようになるかはわかりませんが、唯一わかっていることは、応答のどこかに「バケット」ネストされた要素があり、ご覧のとおり、トップ レベル内に他のネストされた「バケット」があることです」バケット」要素。buckets
また、配列内の構造も明確ではないことに注意してください。別のサブバケットがある場合、サブバケットが親内のどこかにある必要があることは明らかですbucket
-そのため、パターンは一貫しています。
このような再帰構造を解析し、次Bucket
のクラスを再帰的に生成する最良の方法は何ですか?
最初に考えていたのは
しかし、それは再帰的にもたらすことはなくbuckets
、トラバースする正しい方法ではありません。
何か案は?