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"
}
}
]
}
먼저, 데이터가 유효한 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
출력 유형을 지정하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다