Bir sunucudan JSON dizesini getiren, ayrıştıran ve verilerle bir şeyler yapan basit Haskell programı üzerinde çalışıyorum. Spesifikler şu an için gerçekten uygun değil, sorun şu ki geri dönen JSON ile ayrıştırmaktır.Haskell'de bir JSON dizgisini ayrıştırma
JSON dizesini sunucudan bir IO String
türü olarak alıyorum ve bir JSON nesnesine nasıl ayrıştırılacağını anlayamıyorum.
Herhangi bir yardım çok takdir :)
İşte şimdiye kadar benim kodudur.
import Data.Aeson
import Network.HTTP
main = do
src <- openURL "http://www.reddit.com/user/chrissalij/about.json"
-- Json parsing code goes here
openURL url = getResponseBody =<< simpleHTTP (getRequest url)
Not: önerilir gibi görünüyor ne gibi ben örnekte Data.Aeson
kullanıyorum, ancak ben başka kitaplık kullanmak daha istekli olurdu. Ayrıca bu kodun herhangi biri ve hepsi değiştirilebilir.
Geri planda tuttuğunuz konusunda daha spesifik olmanıza yardımcı olur. IO monadından ipi mi alıyor? Yoksa ayrışmanın mekaniği mi? (Eğer ikincisiyse, RWH'yi kontrol edin - JSON'u ayrıştırmak için ayrılmış bölümler vardır.) FWIW, ByteString kütüphanesini öğrenmek için uzun vadede size değecektir. Haskell Dizeleri çok yavaş. – rtperson
@rtperson. Dizeler ayrıştırma için otomatik olarak yavaş değil. Dizeler Char'ın listeleri olduğu için, kafadaki yıkımı doğal ve verimli bir şekilde destekliyorlar - bu, ayrıştırma için gerekenler. Tabi ki, Char'ın listeleri bellek kullanımıyla ilgili genel metin için zayıf bir temsildir. –
@rtperson Aslında ikisi de. Haskell'e yeni geldim, bu yüzden JSON'u diğer birkaç dilde ayrıştırırken, Haskell'in özellikleri bana ulaşıyor. –