問題タブ [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.
haskell - Aeson に重労働をどこまで任せることができますか?
toJSON の定義を書かないようにしています。これは私が遭遇したエラーです:
すべての HashMapdata
宣言で同様のエラーが発生します。
関連するコードは次のとおりです。情報が不足している場合はお知らせください。
はエクスポートされていないData.Aeson.Types.Class.GToJSON
ため、 のインスタンスを作成できません。Data.Aeson.Types.Class
私のオプションは何ですか?手動で何を書く必要がありますか? deriveJSON
最良の選択ですか?
更新: 以下の提案を実装しました。これがコードです
最初のインスタンスはObject fromList [("key",Array (fromList []))])
2 番目のインスタンスの利回りObject fromList [("name",Array (fromList []))]
なぜname
そしてkey
空なのですか?
どうすればわかりますか?
を使用する方が簡単でしょうかderiveJSON
。
更新: NathanHowell の助けのおかげで、より重要な問題が解決されました。これは、単項型の GToJSON インスタンスです。解決策は、単項型の独自のインスタンスを作成することでした。JSON オブジェクトは順不同ですが、それが問題かどうかはわかりません。もしそうなら、フィールドの別の手動 ToJSON インスタンスがそれを修正するようです。
更新: わかりました少しコンテキスト。私はJIRAフロントエンドを書いています。私が言及したのは、将来人々が次のような良いニュースを発見するためにここに来るかもしれないからです: JIRA はオブジェクトの順序を気にしません。
json - レコードのデータ検証
Haskell ライブラリを知っていますか?
- レコードの検証と (!)の簡略化を提供します。
- エイソンで動作しますか?
いくつかのコンストラクター関数を記述できることはわかっていますが、車輪の再発明をせずにボイラープレートを消去したいと考えています。
私が探しているのは次のとおりです。
フィールドごとに「契約」を定義したいと考えています。例えば:
ここで、JSON をレコードに解析した後、次のことが成り立つことを保証したいと思います。
- [0,Inf) の年齢
- 電子メールは「^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[AZ]{2,6}$」に一致します
- プロジェクトには少なくとも 2 つのプロジェクトが含まれています
年齢が 0 未満のレコードを作成しようとすると、"age=0 no in [0,inf)" のようなエラー メッセージが表示されます。このようなものは、テンプレート Haskell を介して派生できるはずだと思います。
さらに、これをパーサーフェーズに統合したいと考えています。したがって、「Integral が必要な場合、代わりに String が発生しました」のようなエラー メッセージを取得する代わりに、次のようなエラー メッセージを取得したいと考えています。
- エラーの位置を示します (これが attoparsec で可能かどうかはわかりません)
- エラーについて説明します。
json - Haskell の名前空間に対処するには?
data
オブジェクトをマーシャリングするためのレコードを書いていJIRA
JSON
ます。問題は、複数のオブジェクトが名前と値のペアに対して同じラベルを持っていることです。例えば :
(curl から返され、フォーマット済み)
問題のある対応する Haskelldata
レコードを作成すると、次のようになります。
「id」と「self」は衝突します。レコード内の名前を変更し、手動で作成したFromJSON
インスタンスで修正するだけで、これを解決できることがわかりました。代替ソリューションは大歓迎です。
xml - このコードでセグメンテーション違反が発生するのはなぜですか?
API から xml を解析し、一部の情報を取り除き、結果を json として出力するモジュールを作成しようとしていますが、出力ステップで問題が発生しました。ショーを印刷すると、正しいデータがそこにあることが確かにわかりますが、レコードをjsonに変換する必要がある呼び出しencode shows
により、セグメンテーション違反が発生します。
編集: user1891025 が指摘したように、これは私のマシンまたはパッケージのバージョンに問題がある可能性があります。
- システム: Ubuntu 11.04 32 ビット
- エイソン v0.6.1.0
- GHC v7.2.1
この質問はますます具体的になってきているので、irc に持っていきますが、誰か助けがあれば教えてください!
haskell - Text が適切と思われる場所で、ライブラリ設計者が ByteString を使用するのはなぜですか?
私のアプリで作業していると、Aeson が UTF8 入力をデコードしないという問題に遭遇しました。Parser ByteString
さらに深く掘り下げると、問題の原因と思われる Attoparsec に依存していることがわかりました。しかし、それは私がここで尋ねていることではありません。
JSONはバイナリファイルではなく、読み取り可能なテキストであり、UTF8文字が含まれている可能性があるため、ByteString
私には明らかなように、適切な場所を使用している人を見たのはそれだけではありません。Text
だから私は何かが欠けていて、選択する正当な理由があるByteString
のか 、Text
それともラテン語以外の文字セットをあまり気にしない大多数の人々によって引き起こされた悪いライブラリ設計の広範な現象なのか疑問に思っています.
haskell - GHC Haskellがオーバーロードされたレコードパラメータ名をサポートしないのはなぜですか?
私が話しているのは、次のことを定義することはできないということです。
GHCはこれを単純な関数に脱糖するだけであり、これを解決する慣用的な方法は次のようになります。
これを書いた後、私はそれがあまり好きではありません...このタイプクラスは脱糖プロセスの一部ではありませんでしたか?
Aeson JSON解析を書いているときに、その考えが浮かびました。すべてのデータ型のインスタンスを導出するのFromJSON
が簡単すぎる場合は、すべてを手作業で書き出す必要がありました(現在は1,000行を超えてカウントしています)。name
データレコードのような、または単にデータレコードに名前を付けるvalue
ことは、それほど珍しいことではありません。
http://www.haskell.org/haskellwiki/Performance/Overloadingは、関数のオーバーロードが実行時のオーバーヘッドをもたらすと述べています。しかし、実際には、コンパイラがコンパイル時にこれを解決できず、内部で異なる名前を付けることができない理由がわかりません。
2012年のこのSOの質問は、多かれ少なかれ歴史的な理由を述べており、2006年のメールスレッドを指しています。最近何か変わったことはありますか?
実行時のオーバーヘッドがいくらかあるとしても、ほとんどの人は気にしないでしょう。ほとんどのコードはパフォーマンスが重要ではないからです。
これを実際に可能にする隠された言語拡張機能はありますか?繰り返しますが、よくわかりません...しかし、イドリスは実際にこれを行っていると思いますか?
json - Aesonで配列を一致させる方法
JSONデータを処理しようとするときのhaskellの初心者の質問。
次の内容のkkという名前の単純なファイルがあります。
そして、次のコードで正常に読み取り、解析しています。
ただし、ファイルが配列である場合、ファイルをどのように処理する必要があるかを判断できないようです。つまり、次のことを意味します。
配列のケースを折りたたんだり、反復したりするにはどうすればよいですか?
json - haskell で aeson を使用して部分的な json オブジェクトを解析する
Warp (およびおそらく Scotty) と酸状態を使用して、Haskell でかなり単純な CRUD Web サービスを作成しています。
酸性状態では、User レコードを Data.Map に格納します (この例のように)。これらのレコードは作成時に常に完全であることを知っているので、多くの MaybeS で資格を得る必要はありません。ただし、ユーザーを更新する場合、クライアントは一部のフィールドのみが入力された部分的な json オブジェクトを送信することを選択する場合があります。
これを表現する慣用的な方法は何でしょうか? 1 つのデータ宣言、FullUser、MaybeS なし、およびすべてのオプションのキー、PartialUser の前に MaybeS とまったく同じものを用意し、aeson に後者のエンコードとデコードを自動的に導出させ、最終的にタイプ :: の独自の更新関数を作成する必要があります。 FullUser -> PartialUser -> FullUser?
大したコードではありませんが、少し見苦しく、DRY に少し違反しているように感じます。これは Web サーバーでは一般的なタスクであるはずなので、おそらく既に一般的に (おそらく TH で) 解決されているのではないでしょうか?
json文字列を保存するだけで不足しているキーを常にチェックできるため、少し面倒ですが、スキーマの変更に対する将来の証拠が増えますが、「タイプセーフ」な方法でそれを行う方法を知りたいです。
編集:または、おそらく FullUser のみを持ち、aeson-lens を使用して、FullUser と json 文字列から単純な更新関数を作成する必要がありますか?
regex - Haskell: aeson、OverloadedStrings および Text.Regex.PCRE
Text.Regex.PCRE を使用して正常に機能する正規表現があります。
ただし、{-# LANGUAGE OverloadedStrings #-} を追加して aeson (json ライブラリ) を使用し、=~: でインスタンス エラーを取得しました。
修正を検索すると、正規表現を次のように変更するようです。
しかし、それは私に別のインスタンスエラーを与えるだけのようです:
ここに入れるのに適したタイプは何ですか? 私が試したことは何もうまくいかないようです。OverloadedStrings が問題のようですが、aeson で Data.Text.pack を使用する以外に解決策が見つかりません。これは機能しますが、正規表現で何が間違っているのかを理解したいと思います。Text.Regex が OverloadedStrings で機能しない問題であるかどうかは興味がありますが、その証拠は見つかりません。
haskell - Aeson でのデコードによる「何もない」結果
私はこのコードを使用しています:
次のように JSON を解析してみます。
しかし、 main は毎回 Nothing を返すだけです。私は何を間違えましたか?parseJSON でさえ、Original に対して呼び出されていないようです。