3

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
4

1 に答える 1