問題タブ [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 - 複合データ型の aeson を使用した JSON の解析
次のデータ型があります。
toJSONの次のコードが付属しています。動作しますが、改善が必要です。ドキュメントとディレクトリを別々に変換する必要がありますが、その方法がわかりません。
JSON から DocumentOrDirectory オブジェクトを解析できる必要があります。これは私が思いついたものです(動作しません):
データを JSON との間で変換できるようにするには、既存のコードをどのように変更すればよいですか?
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\"}"
、エラーが発生します。
これは「ò」の文字で、もう少し意味があります。
haskell - Generic から派生したレコード データ型のフィールドの名前と型を一覧表示することはできますか?
Data.Data を派生するデータ型の場合constrFields
、フィールド名のリストが得られることを私は知っています。GHC.Generics のドキュメントを見ると、同じことが可能であると思いますGeneric
。(しかし、悲惨なことに自分でそれを行う方法を理解できませんでした)。
より具体的には、次の 2 つのことを探しています。
すべてのレコード フィールドを一覧表示する
... Haskell プログラム内。aesonが、 から派生する任意のレコード データ型の JSON 表現を自動的に推測できることは知っていましGeneric
たが、そのソース コードを読んだだけで、私がここで無知であることが確認されました。私が推測できることから、 aeson はレコードのデータ型からすべてのフィールド名 ( String
s またはs として) を取得できる必要があります。ブロックパターンマッチングに使用できるものなら何でも構いません)。ByteString
TypeRep
Eq
case
M1
、などのクラスとインスタンスを作成するのが方法だと漠然と思い込んでいますが:*:
、タイプチェッカーには到達できませんでした。
レコード セレクターを調べる
それが属するレコードのデータ型、レコード フィールド名 (as String
) などを取得するには、.
たとえば、与えられた
magic
みたいな機能
これらは で可能deriving Generic
ですか、それとも Template Haskell に頼る必要がありますか?
json - DeriveGeneric と makeLenses を使用した Aeson と Lens - 名前が一致しません
私がタイプを持っているとしましょうPerson
そして、レンズと JSON 型クラスを自動的に派生させたい
これは正しく機能しますが、DeriveGeneric はフィールド名にアンダースコアが含まれていると見なし、JSON がそれに応じてフォーマットされることを期待します。
明らかに、data
定義自体からアンダースコアを削除makeLenses
できますが、必要なゲッターとセッターを派生させることはできません。
理想的には、私ができるようになりたいのは、このようなものです
つまり、使用している JSON-REST Api の値とすべてのフィールド名が正しく並んでいるレンズと JSON インスタンスを、多くのボイラープレートを記述することなく派生できるようにしたいと考えています。
これはとても簡単なことのように思えるので、明らかな何かが欠けていると感じますか?
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つの形式です。最初は、これを別の型に埋め込まれた型として使用しようとしましたが、それがうまくいかなかったときに、これを簡単に解析できるように「値」キーを追加しました (うまくいきませんでした)。
parsing - Data.Aeson を使用した JSON 解析で正しくエラーを出す方法
以下にリストされている私のタイプと対応する FromJSON 実装。
はaにnonEmpty
変わり、が実際に空で、解析を中止しなければならない場合を正しく処理しようとしています。この解析は実際には の内部で行われます。つまり、そこから抜け出したくありませんが、戻りたい(または、他の方法でトリックを実行するものは何でも、これまでに遭遇した唯一のものです)。ハンドラーは、500 でクラッシュするのではなく、400 を正しく返します。List
Maybe NonEmpty
List
parseJsonBody
error "foo"
mzero
mzero
以下のアプローチはコンパイルされますが、私が知る限りerror
、parseJSON 内でスローされる例外とほとんど同じか、他の形式です。mzero
ただし、戻ると (たとえば<*> mzero
、その行の代わりに)、意図したとおりに失敗します。
1 つのオプションは、 の結果に対して何らかの形でパターン マッチを行うことですがfmap NE.nonEmpty (o .: "responses")
、そこにどのようなパターンがあるのかよくわかりません。Parser にはコンストラクターがないように見えませんか?
haskell - Traversal を IsString のインスタンスにすることは可能ですか?
Traversal として文字列リテラルを使用したいのですが、型が少しわかりません。このインスタンスを作成することは可能ですか?
State モナド内でこのようなことを達成するには:
全称量化型インスタンスの問題。ありがとう!
haskell - 解析された Aeson 値を調べる方法は?
大きくブラウジングするにはどうすればよいAeson
Values
ですか? 興味のある文字列が構造体のどこかにネストされている必要があることはわかっています。どうすれば見つけられますか?
これまでのところ、コンストラクターを照会する方法しか知らず、それが配列であることがわかりました。どうすればそれ以上深く掘り下げることができますか?