問題タブ [aeson]
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 - Haskell JSON レンズ式を変換して JSON に戻す
次の Aeson Lens 式にサフィックスを付けるにはどうすればよいですか
結果はValue
(Object
コンストラクターを使用して)であり、String
?ではありません。
json - Aeson を使用して文字列をデコードする際の問題
aeson を使用して、API によって返された json を解析しようとしています。応答は、wreq を使用して API エンドポイントからフェッチされます。この文字列で eitherDecode を実行すると、次のようになります。
これはおそらくテキスト エンコーディングを正しく理解していないためですが、API が返す文字列は実際には有効な json ではないようです。その場合、どのように進めればよいですか?いずれにせよ、誰かが私を正しい方向に向けてくれてありがとう!
以下に、私の問題を再現する例を含めました。
date - Haskell 日付の解析
Data.Time.Calendar の Day タイプの FromJSON インスタンスを作成しようとしています。タイプについて混乱しています。これは、解決する必要がある十分に一般的な状況のようです。
したがって、Day 型は修正されたユリウス日を表します。また、Data.Time.Calendar モジュールは「showGregorian」を定義します。これは、修正されたユリウス日付をグレゴリオ日付に変換し、文字列 ISO 8601 表現を出力します。
問題は、Data.Time.Calendar には ISO 8601 を解析してグレゴリオ暦の日付にする良い方法がないことです。ParseTime クラスを使用すると、文字列形式でのみ渡すことができ、文字列が日付を表すカレンダーは渡せません。したがって、事実上、'20140502' を渡すと、ParseTime クラスはその文字列を、修正されたユリウス日付の文字列表現として扱います。
これは解決された問題であるべきだと思われます。理想的には、日時を使用しないソリューションが必要です。私のモデルはグレゴリオ暦の日付を使用しています。それが必要なすべてであり、比較、検索などを行うものだからです。
もちろん、暦日だけが必要なときに暦日を使用した理由は、それらを比較して変換する方法を考える必要がないようにするためでしたが、それは別の日の泣き言だと思います.
補遺:
日は次のように定義されます。
これにより、日は物理的な日ではなく、MJD カレンダーの日であると考えるようになりました (公開されたドキュメントは、型の表現ではなく、型が何を表しているかを示すべきであるという原則に基づいています)。
json - Pipes.Aeson を使用した Haskell での JSON のストリーミング解析
Pipes.Aeson ライブラリは、次の関数を公開します。
このパーサーとファイル ハンドルを引数として evalStateT を使用すると、1 つの JSON オブジェクトがファイルから読み取られて解析されます。
問題は、ファイルに複数のオブジェクト (すべて同じタイプ) が含まれており、それらを読み取るときに折りたたむか縮小したいことです。
Pipes.Parse は以下を提供します。
しかし、ご覧のとおり、これは新しいパーサーを返します。最初のパーサーを引数として指定する方法が思い浮かびません。
パーサーは実際には StateT モナド変換子のプロデューサーのようです。StateT からプロデューサーを抽出して、evalStateT を foldAll パーサーに適用し、プロデューサーをデコード パーサーから抽出する方法はないかと考えました。
ただし、これはおそらく完全に間違ったアプローチです。
簡単に言えば、私の質問:
Pipes.Aeson を使用してファイルを解析する場合、ファイル内のすべてのオブジェクトを折りたたむ最良の方法は何ですか?
haskell - 「無料」の参照を持つ Aeson Prisms
「Lens/Aeson Traversals/Prisms」というすばらしい記事を読んで、実際のアプリケーションを作成してください。次の匿名化された JSON 構造が与えられた場合、特定の値ではなくコレクションを抽出するにはどうすればよいでしょうか?
私は持っている:
私が欲しいもの:
プリズムの点全体が欠けていますか? それとも、これは正当な使用例ですか?
乾杯!
json - Haskell でタプルの配列を JSON に変換する
誰でも変換方法を知っていますか
に似たJSONに
(できれば)Aesonを使用していますか?
haskell - aesonデコードに必要な型署名?
TCP 接続から JSON を解析する小さなプログラムを書いていますが、エラーが発生しました。
にどの署名を追加するか迷っていinstance FromJSON LogIn
ます。
コードは次のとおりです。
haskell - fromJson にデフォルトのタイムスタンプを挿入する
Yesod のルートに json を送信する ajax 呼び出しがあり、ルートで json を解析してデータベースに直接挿入する必要があります。私のモデルファイルには
クライアントが作成時間を送信していないため、json の解析が妨げられています。ログエントリ用に独自の parseJson を記述しようとしましたが、getCurrentTime が IO モナドで値を返すため、UTCTime のデフォルトを挿入できませんでした。可能であれば、データベースに値を設定してもらいたいです。
この時点で考えられる唯一のことは、LogEntryWithoutTime のような型を作成し、JSON を解析して LogEntry に変換することです。もっと簡単な方法はありますか?
編集: JSON 解析に getCurrentTime を追加する 3 つの異なる失敗を示します。まず、使用可能な場合は createtime を解析し、デフォルトでサーバーの getCurrentTime に設定することを目的としています。クライアントの時間に頼るべきではないので、これはとにかく正しくありません。
エラーは
次に、現在の時刻を取得しようとします。
エラーが発生します
行を次のように変更すると
それから私は得る
json - エラー処理付きの Aeson と Lenses
私はレンズの魔法に非常に慣れていないので、これに問題があります。
参照: https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms
JSON オブジェクトは、次の方法でトラバースできます。
次のような JSON オブジェクトの場合:
Maybe モナドは全体で使用されているため、「アクセサ」が失敗すると、Nothing
.
どのアクセサーが失敗したかがわかるように、失敗も伝播したいと思います。
私が考えることができる唯一の方法は、アクセサーの配列を渡し、それらを順番に適用し、失敗した時点でエラーを返すことです。このようなもの:
だからこれで:
これを行うよりエレガントな方法はありますか?lens を使用するために、Either-ish モナドを作成すると、次のようになりwithFailure
ます。