Q
在埃宋
0
A
回答
1
你必須轉換Y/M/d /從字符串
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-tabs #-}
import Control.Monad
import Data.Aeson
import qualified Data.Text as T
import Text.Read (readMaybe)
-- import qualified Data.Attoparsec.Text as A
data Date = Date Int Int Int deriving (Read, Show)
instance ToJSON Date where
toJSON (Date y m d) = toJSON $ object [
"date" .= T.pack (str 4 y ++ "-" ++ str 2 m ++ "-" ++ str 2 d)]
where
str n = pad . show where
pad s = replicate (n - length s) '0' ++ s
instance FromJSON Date where
parseJSON = withObject "date" $ \v -> do
str <- v .: "date"
let
[email protected](~[y, m, d]) = T.split (== '-') str
guard (length ps == 3)
Date <$> readNum y <*> readNum m <*> readNum d
where
readNum = maybe (fail "not num") return . readMaybe . T.unpack
-- -- or with attoparsec
-- parseJSON = withObject "date" $ \v -> do
-- str <- v .: "date"
-- [y, m, d] <- either fail return $
-- A.parseOnly (A.decimal `A.sepBy` A.char '-') str
-- return $ Date y m d
5
爲什麼另起爐竈?在time
包中有一個稱爲Date
的半標準表示 - 它被稱爲Day
。它會變得更好:不僅該相同的軟件包甚至會爲您提供用於從您擁有的格式解析Day
的實用程序,這些實用程序甚至可以導出到aeson
。是的,目前已經有aeson
ToJSON
和FromJSON
實例爲Day
:
ghci> :set -XOverloadedStrings
ghci> import Data.Time.Calendar
ghci> import Data.Aeson
ghci> fromJSON "2015-04-12" :: Result Day
Success 2015-04-12
ghci> toJSON (fromGregorian 2015 4 12)
String "2015-04-12"
如果你真的想提取幾天,幾個月,甚至幾年,你可以隨時使用toGregorian :: Day -> (Integer, Int, Int)
。堅持標準抽象可能是一個很好的長期選擇。
相關問題
- 1. 埃宋fromJSON例如
- 2. 處理`id`與埃宋/ JSON衍生埃宋FromJSON實例
- 3. 解析JSON與埃宋
- 4. 試圖從使用埃宋
- 5. 嘗試使用埃宋
- 6. 無法在埃宋和斯波克
- 7. 獲取使用鏡頭埃宋
- 8. 埃宋:解析動態結構
- 9. 解析複雜jsons與埃宋
- 10. 撰寫可選埃宋解析器
- 11. 埃宋:解析枚舉數據類型
- 12. 哈斯克爾:埃宋,OverloadedStrings和Text.Regex.PCRE
- 13. 埃宋:未知重點解析JSON在Haskell
- 14. 解析引用在解析JSON文件與埃宋
- 15. 解析對象的嵌套數組與埃宋
- 16. 埃宋與數組的數組,其中一些是空
- 17. 埃宋:解析動態密鑰類型字段
- 18. 與埃宋解析JSON時,首先關鍵是可變
- 19. Haskell。 MongoDB的驅動程序或埃宋字符集問題
- 20. 自動導出實例與埃宋/ JSON自定義數據類型
- 21. 哈斯克爾埃宋:如何獲取價值解析器的IO單子
- 22. 耶索德 - 埃宋, 「期待的Int64時,遇到字符串代替」
- 23. 嵌套埃爾在jsf
- 24. 網址在埃爾格
- 25. MySQL查詢埃羅
- 26. 錯誤而與埃
- 27. 埃羅:java.lang.NoSuchFieldError的:LUCENE_5_2_1
- 28. RSA API埃羅500
- 29. 運行MPlayer埃羅
- 30. 計數和宋衍濤結構