gpt4 book ai didi

json - 使用 Aeson 解码字符串时遇到问题

转载 作者:行者123 更新时间:2023-12-05 01:17:07 28 4
gpt4 key购买 nike

我正在尝试使用 aeson 来解析 api 返回的 json。使用 wreq 从 api 端点获取响应。在此字符串上运行 eitherDecode 时,我得到:

Left "Failed reading: Cannot decode byte '\\xa3': Data.Text.Encoding.decodeUtf8: Invalid    UTF-8 stream"

这可能是由于我没有正确理解文本编码,但在我看来,api 返回的字符串实际上不是有效的 json。如果是这样,我应该如何进行?无论哪种方式,我都会感谢有人为我指明正确的方向!

我在下面包含了一个重现我的问题的示例。

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}

import Data.Aeson
import Data.Text
import GHC.Generics
import Data.ByteString.Lazy


data Test = Test { priceDescription ∷ Text } deriving (Show, Generic)

instance FromJSON Test

main = do
let a = "\r\n{\r\n\"priceDescription\": \"\163\&5.98 each\"\r\n}" :: ByteString

let result = eitherDecode a :: Either String Test
print result

最佳答案

可能是您的 API 端点没有返回 UTF-8,而是 ISO-8859-1。然后 \163 将转换为 £(英镑)符号,这在上下文中是有意义的。所以我建议使用 text-icu 包来 convert您传入的 ByteStringText,然后将其提供给 Aeson。如果您使用 HTTP 获取数据,也许响应 header 会指示编码?

关于json - 使用 Aeson 解码字符串时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398668/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com