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

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

json - 複合データ型の aeson を使用した JSON の解析

次のデータ型があります。

toJSONの次のコードが付属しています。動作しますが、改善が必要です。ドキュメントとディレクトリを別々に変換する必要がありますが、その方法がわかりません。

JSON から DocumentOrDirectory オブジェクトを解析できる必要があります。これは私が思いついたものです(動作しません):

データを JSON との間で変換できるようにするには、既存のコードをどのように変更すればよいですか?

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

haskell - Aeson は Unicode 文字を含む文字列をデコードしません

Data.Aeson ( https://hackage.haskell.org/package/aeson-0.6.1.0/docs/Data-Aeson.html ) を使用して JSON 文字列をデコードしようとしていますが、文字列の解析に失敗しています。非標準文字が含まれています。

例として、ファイル:

ghci で実行すると、次の結果が得られます。

文字列をユニコード文字で解析しない理由はありますか? 私は、Haskell が Unicode にかなり優れているという印象を受けました。どんな提案でも大歓迎です!

ありがとう、

テチギ

編集

を使用してさらに調査するeitherDecodeと、次のエラー メッセージが表示されます。

x61特殊な Unicode 文字の直後にある「z」の Unicode 文字です。特殊文字の後の文字を読み取れない理由がわかりません!

代わりにに変更test2するとtest2 = decode $ pack "{ \"foo\": \"bòz\"}"、エラーが発生します。

これは「ò」の文字で、もう少し意味があります。

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

haskell - Generic から派生したレコード データ型のフィールドの名前と型を一覧表示することはできますか?

Data.Data を派生するデータ型の場合constrFields、フィールド名のリストが得られることを私は知っています。GHC.Generics のドキュメントを見ると、同じことが可能であると思いますGeneric。(しかし、悲惨なことに自分でそれを行う方法を理解できませんでした)。

より具体的には、次の 2 つのことを探しています。

すべてのレコード フィールドを一覧表示する

... Haskell プログラム内。aesonが、 から派生する任意のレコード データ型の JSON 表現を自動的に推測できることは知っていましGenericたが、そのソース コードを読んだだけで、私がここで無知であることが確認されました。私が推測できることから、 aeson はレコードのデータ型からすべてのフィールド名 ( Strings またはs として) を取得できる必要があります。ブロックパターンマッチングに使用できるものなら何でも構いません)。ByteStringTypeRepEqcase

M1、などのクラスとインスタンスを作成するのが方法だと漠然と思い込んでいますが:*:、タイプチェッカーには到達できませんでした。

レコード セレクターを調べる

それが属するレコードのデータ型、レコード フィールド名 (as String) などを取得するには、.

たとえば、与えられた

magicみたいな機能

これらは で可能deriving Genericですか、それとも Template Haskell に頼る必要がありますか?

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

json - DeriveGeneric と makeLenses を使用した Aeson と Lens - 名前が一致しません

私がタイプを持っているとしましょうPerson

そして、レンズと JSON 型クラスを自動的に派生させたい

これは正しく機能しますが、DeriveGeneric はフィールド名にアンダースコアが含まれていると見なし、JSON がそれに応じてフォーマットされることを期待します。

明らかに、data定義自体からアンダースコアを削除makeLensesできますが、必要なゲッターとセッターを派生させることはできません。

理想的には、私ができるようになりたいのは、このようなものです

つまり、使用している JSON-REST Api の値とすべてのフィールド名が正しく並んでいるレンズと JSON インスタンスを、多くのボイラープレートを記述することなく派生できるようにしたいと考えています。

これはとても簡単なことのように思えるので、明らかな何かが欠けていると感じますか?

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

haskell - aesonを使用したHaskell ADT

私は単純な ADT と戦ってきました。JSON との間で往復させようとしましたが、どのように型をマッサージしたり変更したりしようとしても、運がありませんでした。私は何が欠けていますか?

コンパイルすると、常に同じ実行時エラーが発生します。

おそらく同じエラーが原因で、これを試しても「何もありません」と表示されます:decode $ encode t

これらのソースに従おうとしましたが、何を試しても、このランタイム エラーを回避できないようです: Haskell :: Aeson :: parse ADT based on field value https://www.fpcomplete.com/ユーザー/Geraldus/algebraic-data-types-adts-with-aeson

これが私が使用しているコードの1つの形式です。最初は、これを別の型に埋め込まれた型として使用しようとしましたが、それがうまくいかなかったときに、これを簡単に解析できるように「値」キーを追加しました (うまくいきませんでした)。

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

parsing - Data.Aeson を使用した JSON 解析で正しくエラーを出す方法

以下にリストされている私のタイプと対応する FromJSON 実装。

はaにnonEmpty変わり、が実際に空で、解析を中止しなければならない場合を正しく処理しようとしています。この解析は実際には の内部で行われます。つまり、そこから抜け出したくありませんが、戻りたい(または、他の方法でトリックを実行するものは何でも、これまでに遭遇した唯一のものです)。ハンドラーは、500 でクラッシュするのではなく、400 を正しく返します。ListMaybe NonEmptyListparseJsonBodyerror "foo"mzeromzero

以下のアプローチはコンパイルされますが、私が知る限りerror、parseJSON 内でスローされる例外とほとんど同じか、他の形式です。mzeroただし、戻ると (たとえば<*> mzero、その行の代わりに)、意図したとおりに失敗します。

1 つのオプションは、 の結果に対して何らかの形でパターン マッチを行うことですがfmap NE.nonEmpty (o .: "responses")、そこにどのようなパターンがあるのか​​よくわかりません。Parser にはコンストラクターがないように見えませんか?

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

haskell - Traversal を IsString のインスタンスにすることは可能ですか?

Traversal として文字列リテラルを使用したいのですが、型が少しわかりません。このインスタンスを作成することは可能ですか?

State モナド内でこのようなことを達成するには:

全称量化型インスタンスの問題。ありがとう!

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

haskell - 解析された Aeson 値を調べる方法は?

大きくブラウジングするにはどうすればよいAeson Valuesですか? 興味のある文字列が構造体のどこかにネストされている必要があることはわかっています。どうすれば見つけられますか?

これまでのところ、コンストラクターを照会する方法しか知らず、それが配列であることがわかりました。どうすればそれ以上深く掘り下げることができますか?