私はhaskellでJSONデータを解析しようとしています。たくさんのウェブサイトを見てきて、これは私が得ることができる最も遠いものです。jsonのhaskellでの解析
data Address = Address { house :: Integer, street :: String, city :: String, state :: String, zip :: Integer } deriving (Show)
data Person = Person { name :: String, age :: Integer, address :: Address } deriving (Show)
getName :: Person -> String
getName (Person n _ _) = n
getAddress :: Person -> Address
getAddress (Person _ _ a) = a
getState :: Address -> String
getState (Address _ _ _ s _) = s
私は、ファイルex.hsにし、GHCiの中でそれを読み込むことを書く - >
Prelude> import Text.JSON
Prelude Text.JSON> :load ex
Main Text.JSON> let aa = "{\"name\": \"some body\", \"age\" : 23, \"address\" : {\"house\" : 285, \"street\" : \"7th Ave.\", \"city\" : \"New York\", \"state\" : \"New York\", \"zip\" : 10001}}"
...> decode aa :: Result JSValue
それは言うこと
Ok (JSObject (JSONObject {fromJSObject = [("name",JSString (JSONString {fromJSString = "some body"})),("age",JSRational False (23 % 1)),("address",JSObject (JSONObject {fromJSObject = [("house",JSRational False (285 % 1)),("street",JSString (JSONString {fromJSString = "7th Ave."})),("city",JSString (JSONString {fromJSString = "New York"})),("state",JSString (JSONString {fromJSString = "New York"})),("zip",JSRational False (10001 % 1))]}))]}))
言うまでもなくを返し、それはかなり冗長なようだ(と恐ろしい)。私はやってみた
...> decode aa :: Result Person
それは私にエラーを与えた。このjson文字列からPersonデータ構造のインスタンスを作成するにはどうすればよいですか?例えば、私はJSON文字列に人の状態を取得するために何をすべき...
JSONのインスタンスを作成する方法の例として、代わりに挙げたことがあります。 – Wes
@Wes、そこに行きます。 – sabauma
非常に有用な情報です。質問があります。 'Text.JSON.Generic'(このパッケージの由来は?)とは別に、https://hackage.haskell.org/package/generic-aesonも同様にジェネリックの機械を使ってHaskellのJSONインスタンスを作成していますデータ。これらの2つのパッケージの違いは何ですか? –