我試圖將對象序列化爲JSON字符串並將其寫入文件。將json寫入Haskell中的文件(使用文本而不是[Char])
在Python中,我會做一些事情,如:
>>> meowmers = {"name" : "meowmers", "age" : 1}
>>> import json
>>> with open("myfile.json","wb") as f
json.dump(meowmers, f)
$ cat myfile.json
{"age": 1, "name": "meowmers"}
我在Haskell
$ stack ghci
{-# LANGUAGE OverloadedStrings #-}
:set -XOverloadedStrings
import GHC.Generics
import Data.Aeson as A
import Data.Text.Lazy as T
import Data.Text.Lazy.IO as I
:{
data Cat = Cat {
name :: Text
, age :: Int
} deriving Show
:}
let meowmers = Cat {name = "meowmers", age = 1}
writeFile "myfile.json" (encode meowmers)
看着這哦,不!
*A T I GHC.Generics> I.writeFile "myfile2.json" (encode meowmers)
<interactive>:34:29:
Couldn't match expected type ‘Text’
with actual type ‘bytestring-0.10.6.0:Data.ByteString.Lazy.Internal.ByteString’
In the second argument of ‘I.writeFile’, namely ‘(encode meowmers)’
In the expression: I.writeFile "myfile2.json" (encode meowmers)
兩個問題:
- 這似乎是一個字節串。我該如何處理?
- 如果這不是我想要做的,有沒有一個Haskell json序列化解決方案使用文本而不是字符串,它還很簡單?
有一種簡單的方式來獲得該版本Data.Aeson.Text的?似乎打破我的包: - 添加依賴關係時失敗: aeson:需要(> = 1.0.0.0),無法解決其依賴關係 – Mittenchops
第二個給我: ''' *主要BS GHC。泛型TI> BS.writeFile 「myfile2.json」(編碼meowmers):23:30: 不能匹配預期類型 'BS.ByteString' 與實際類型 'Data.ByteString.Lazy.Internal.ByteString' NB:在'Data.ByteString.Internal'中定義'BS.ByteString' 'Data.ByteString.Lazy.Internal.ByteString' 在'Data.ByteString.Lazy.Internal' 中定義在第二個參數'BS.writeFile',即 '(編碼meowmers)' 在表達式中:BS.writeFile「myfile2.json」(encode meowmers) ''' –
Mittenchops
對於第二種解決方案,嘗試將import改爲:import合格Data.ByteString.Lazy作爲BS' – ErikR