用Aeson解析复杂的jsons

前端之家收集整理的这篇文章主要介绍了用Aeson解析复杂的jsons前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用Aeson库解析一个API到一个 haskell记录类型的调用

我使用维基百科页面,并将其解析为标题链接列表.
一个样本就是这个,

{"query":{"pages":{"6278041":{"pageid":6278041,"ns":0,"title":"Lass","links":[{"ns":0,"title":"Acronym"},{"ns":0,"title":"Dead Like Me"},"title":"Donna Lass"},"title":"George Lass"},"title":"Girl"},"title":"Lassana Diarra"},"title":"Lightning Lass"},"title":"Real Madrid"},"title":"Shadow Lass"},"title":"Solway Lass"},"title":"Szymon Lass"},"title":"The Bonnie Lass o' Fyvie"},"title":"The Tullaghmurray Lass"},"title":"Woman"},{"ns":12,"title":"Help:Disambiguation"}]}}}}

我想解析它的标题和这样的数据类型的链接列表.

data WikiPage = WikiPage { title :: String,links :: String }

我目前拥有的是什么代码,

instance FromJSON WikiPage where
  parseJSON j = do
    o <- parseJSON j
    let id = head $o .: "query" .: "pages" 
    let name = o .: "query" .: "pages" .: id .: "title"
    let links = mapM (.: "title") (o .: "query".: "pages" .: id .: "links")
    return $WikiPage name links

我收到错误,

Couldn't match expected type `Data.Text.Internal.Text'
                with actual type `[Char]'
    In the second argument of `(.:)',namely `"title"'

我真的不知道发生了什么,我觉得我如何映射链接一定是一个问题,但我不确定要做什么.我也不知道我应该如何在第二个查询字符串中使用id,因为它是一个解析器(我确定我需要在这里使用应用程序,但我不知道如何).我还没有找到任何分解更复杂的jsons这样的例子.

解决方法

我也想弄清aeson.我遇到了同样的问题,我通过在我的源文件的顶部添加{ – #LANGUAGE OverloadedStrings# – }来解决这个问题.我对Haskell很新,但我相信它会增加一个非官方的语言扩展,大概是允许字符串与其他类似字符串的数据类型相同.

猜你在找的JavaScript相关文章