相关疑难解决方法(0)

Haskell Aeson:如何将Value转换为自定义类型?

找不到一个好例子.感谢任何帮助.JSON如下:

[{
  "EXIF:Make": "Canon",
  "EXIF:Model": "Canon PowerShot S95",
  "EXIF:Orientation": "Horizontal (normal)",
  "EXIF:XResolution": 180,
  "EXIF:YResolution": 180,
  "EXIF:ResolutionUnit": "inches"
}]
Run Code Online (Sandbox Code Playgroud)

我使用的代码如下:

import Data.Aeson
import Data.Attoparsec
import Data.ByteString
x <- fmap (parse json) (Data.ByteString.readFile "json.txt")
Run Code Online (Sandbox Code Playgroud)

如何定义和使用FromJSON要转换x为的类型:

data Exif = Exif [[(String, String)]]
Run Code Online (Sandbox Code Playgroud)

或类似的数据结构?注意[[]]- 我希望JSON有多个顶级条目.

json haskell aeson

6
推荐指数
1
解决办法
1877
查看次数

Haskell,Aeson - 如何调试实例?

我有一个复杂的嵌套json,我试图用Aeson和Attoparsec解析我的自定义类型.基于问题的信息:Haskell,Aeson和JSON解析为自定义类型,Aeson:如何将Value转换为自定义类型?和来自互联网的一些信息.

当我使用以下代码时,我从重叠的FromJSON实例获得"Nothing"值,但代码肯定会通过每个实例,我通过禁用其他一些实例来测试它.那么主要问题是:如何在实例中测试代码并查看数据如何在GHCi中执行变更?

PS:尝试设置断点和"跟踪",但它们仅在main和parseCfg函数中起作用.

{-# LANGUAGE OverloadedStrings, FlexibleInstances #-}

-- high level data
data Cfg = Cfg { nm  :: CProperty,
             author :: CProperty,
             langs :: CValue,
             grops :: CListArr,
             projs :: CPropArr
           } deriving (Show)

...

instance FromJSON CProperty where
parseJSON _          = mzero
parseJSON (Object o) = CProperty <$> toCProperty o
  where
    toCProperty :: (HM.HashMap T.Text Value) -> J.Parser (T.Text, T.Text)
    toCProperty _  = error "unexpected property"
    toCProperty o' = do
      l <- return …
Run Code Online (Sandbox Code Playgroud)

parsing json haskell aeson

5
推荐指数
1
解决办法
565
查看次数

标签 统计

aeson ×2

haskell ×2

json ×2

parsing ×1