2011-10-15 53 views
1

我的理解是,如果我使用json解析器解析json數據,我會返回json類型。當然,除非數據不正確。但後來我會期待一個失敗的解析。有人可以解釋我如何使用json解析器生成fromList解析函數從AttoParsec

這一切都在ghci中完成。

>test <- (parseUrl "https://pkg.cudaops.com/cgi-bin/qaLinkEditor.cgi?json=1") :: (IO (Request IO)) 
>nManager <- newManager 
>catch <- httpLbsRedirect test nManager 
>let catchChunks = toChunks $ responseBody catch 
>let flatChunks = Data.ByteString.concat catchChunks 
>let parsed = parse json flatChunks 
>:t parsed 
>parsed :: Data.Attoparsec.Result Value 

結果是相當大的,下面是分析的開始部分,我寫出來的文件

完成「\ n」個對象(fromlist裏[(「名」,字符串「版本」), (FromList [(「BCC Admin」,Object(fromList [(「available」,Array(fromList [String ...「)

我如何得到fromList? [(「available」,Array ...「,我預計」Object(Array [「available」,Array ...「)我是否濫用分析?我只是誤解了分析是如何工作的,它做了它應該做的事情和我的期望錯了?

回答

4

這就是數組打印的方式。約定是Show實例應該提供重新創建值的有效Haskell代碼。

3

我以前沒有使用過Attoparsec,但我認爲它只是Show的實現,它可以爲您提供fromList

Data.Set有這種行爲,以及:

Prelude> import Data.Set 
Prelude Data.Set> :t fromList 
fromList :: Ord a => [a] -> Set a 
Prelude Data.Set> let s = fromList [1, 2, 3] 
Prelude Data.Set> :t s 
s :: Set Integer  -- The value *is* a set, as the type tells us 
Prelude Data.Set> s 
fromList [1,2,3]  -- This is just the string repr of the set 

如果你問ghci中爲fromList類型,我想你會看到你正在尋找的結果類型。正如我在本場景中看到Set a作爲結果類型fromList

+0

那和@Daniel說的也是...... –