我在Haskell中创建一个JSON解析器。我已经按照这个链接https://hackage.haskell.org/package/aeson-0.8.0.0/docs/Data-Aeson.html并尝试解析JSON字符串并获得成功,因为只有一个对象。但现在我必须解析下面的数据但问题是如何解析这个大数据,因为它包含对象和嵌套的对象因此我无法理解如何解析它,请在这方面帮助我。任何形式的帮助都将受到高度赞赏!!
"apiVersion": "2.0",
"data": {
"updated": "2010-01-07T19:58:42.949Z",
"totalItems": 800,
"startIndex": 1,
"itemsPerPage": 1,
"items": [
{
"id": "hYB0mn5zh2c",
"uploaded": "2007-06-05T22:07:03.000Z",
"updated": "2010-01-07T13:26:50.000Z",
"uploader": "GoogleDeveloperDay",
"category": "News",
"title": "Google Developers Day US - Maps API Introduction",
"description": "Google Maps API Introduction ...",
"tags": [
"GDD07",
"GDD07US",
"Maps"
],
"thumbnail": {
"default": "http://i.ytimg.com/vi/hYB0mn5zh2c/default.jpg",
"hqDefault": "http://i.ytimg.com/vi/hYB0mn5zh2c/hqdefault.jpg"
},
"player": {
"default": "http://www.youtube.com/watch?vu003dhYB0mn5zh2c"
},
"content": {
"1": "rtsp://v5.cache3.c.youtube.com/CiILENy.../0/0/0/video.3gp",
"5": "http://www.youtube.com/v/hYB0mn5zh2c?f...",
"6": "rtsp://v1.cache1.c.youtube.com/CiILENy.../0/0/0/video.3gp"
},
"duration": 2840,
"aspectRatio": "widescreen",
"rating": 4.63,
"ratingCount": 68,
"viewCount": 220101,
"favoriteCount": 201,
"commentCount": 22,
"status": {
"value": "restricted",
"reason": "limitedSyndication"
},
"accessControl": {
"syndicate": true,
"commentVote": true,
"rate": true,
"list": true,
"comment": true,
"embed": true,
"videoRespond": "moderated"
}
}
]
}
答案 0 :(得分:1)
首先,我想要注意你的数据不是有效的JSON ....它缺少括起来的大括号....添加" {"在开始和"}"最后解决这个问题。
完成后,使用Data.Aeson进行解析非常容易,只需使用decode
即可。但是有一个障碍。 decode
有一个重载的输出类型,您必须指定您感兴趣的输出。要获得答案,您可以使用Maybe Value
。
decode dataByteString::Maybe Value
请注意,数据需要在ByteString中(因此我的命名)。
Data.Aeson软件包可用于执行更多操作,包括解析特定的非泛型类型,但您尚未提出要求,因此我无法进入该软件包。
在命令行解析的一个小测试程序是:
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as BLC
decodeToMaybeValue::BLC.ByteString->Maybe Value
decodeToMaybeValue = decode
main = do
interact (show . decodeToMaybeValue . BLC.pack)
您需要将decode
重新定义为decodeToMaybeValue
的唯一原因是指定其输出类型。