使用 aeson 将 unicode 从 JSON 读取到 String 字段
Read unicode from JSON to String field using aeson
我使用 httpLbs 收到 JSON 数据并读取它
import qualified Data.ByteString.Lazy.UTF8 as LB
sendSimpleRequest :: Credentials -> IO LB.ByteString
sendSimpleRequest creds = do
<...>
let request = applyBasicAuth user pass $ fromJust $ parseUrl url
manager <- newManager tlsManagerSettings
response <- httpLbs request manager
return $ responseBody response
之后,我可以用putStr . LB.toString
打印结果并得到"summary":"Обсуждение рабочих вопросов"
。
但是,当我尝试使用 aeson
的 decode
将此值放入 data
并打印时
data Fields = Fields
{ fi_summary :: String
} deriving (Show, Generic)
instance FromJSON Fields where parseJSON = genericParseJSON parseOptions
instance ToJSON Fields where toJSON = genericToJSON parseOptions
parseOptions :: Options
parseOptions = defaultOptions { fieldLabelModifier = drop 3 }
parseAndShow = putStr . show . fromJust . decode
我得到转义字符:Fields {fi_summary = "54738991787677858077 88727386958093 7486878886898674"}
似乎我需要配置 aeson
才能正确地将 ByteString
放入 String
,但我不想自己实现 FromJSON
实例,因为我有还有十几个结构,例如 data Fields
。更改 fi_summary
类型也是一种可能,但到目前为止我没有任何运气。
如果您看到转义字符,则说明字符串中的数据很好。默认字符串 Show
实例打印所有非 ASCII 字符,如下所示。所以你得到了数据,这只是一个尝试适当地再次输出它的问题。
您可以尝试使用 putStrLn
打印字符串,或者将其写入文本文件。 (我知道如果语言环境设置错误,有时 putStrLn
会做出奇怪的事情...)
我使用 httpLbs 收到 JSON 数据并读取它
import qualified Data.ByteString.Lazy.UTF8 as LB
sendSimpleRequest :: Credentials -> IO LB.ByteString
sendSimpleRequest creds = do
<...>
let request = applyBasicAuth user pass $ fromJust $ parseUrl url
manager <- newManager tlsManagerSettings
response <- httpLbs request manager
return $ responseBody response
之后,我可以用putStr . LB.toString
打印结果并得到"summary":"Обсуждение рабочих вопросов"
。
但是,当我尝试使用 aeson
的 decode
将此值放入 data
并打印时
data Fields = Fields
{ fi_summary :: String
} deriving (Show, Generic)
instance FromJSON Fields where parseJSON = genericParseJSON parseOptions
instance ToJSON Fields where toJSON = genericToJSON parseOptions
parseOptions :: Options
parseOptions = defaultOptions { fieldLabelModifier = drop 3 }
parseAndShow = putStr . show . fromJust . decode
我得到转义字符:Fields {fi_summary = "54738991787677858077 88727386958093 7486878886898674"}
似乎我需要配置 aeson
才能正确地将 ByteString
放入 String
,但我不想自己实现 FromJSON
实例,因为我有还有十几个结构,例如 data Fields
。更改 fi_summary
类型也是一种可能,但到目前为止我没有任何运气。
如果您看到转义字符,则说明字符串中的数据很好。默认字符串 Show
实例打印所有非 ASCII 字符,如下所示。所以你得到了数据,这只是一个尝试适当地再次输出它的问题。
您可以尝试使用 putStrLn
打印字符串,或者将其写入文本文件。 (我知道如果语言环境设置错误,有时 putStrLn
会做出奇怪的事情...)