Haskell'de JSON verilerini ayrıştırmaya çalışıyorum. Çok sayıda web sitesine girdiğimden bu, ulaşabildiğim en uzundu.json ayrıştırma 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
Bir dosya ex.hs ve GHCi yükleyecek olduğunu yazma ->
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
Bu oldukça ayrıntılı görüküyor
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))]}))]}))
Tabii döndürür (ve korkutucu).
...> decode aa :: Result Person
'u yapmayı denedim ve bana bir hata verdi. Bu json dizisinden Kişi veri yapısının bir örneğini doldurmaya nasıl giderim? Mesela ben
Belki de alternatif olarak bahsettiğinizden beri bir JSON örneğini oluşturma örneği vermelisiniz. – Wes
@Wes, işte gidiyorsunuz. – sabauma
Çok faydalı bilgiler. Bir sorum var. Text.JSON.Generic' (hangi paketden geliyor?) Dışında, aynı şekilde Gencelics makinelerini kullanan ve benzer şekilde Haskell'in JSON örneklerini yapmak için https://hackage.haskell.org/package/generic-aeson'u da buldum. veri. Bu iki paket arasındaki farklar nelerdir? –