저는 하스켈을 처음 보았 기 때문에 간단한 것을 놓치고 싶었습니다. 지금은 stdin에서 일부 JSON을 읽고 AST를 개념 증명으로 다시 돌려 보려고합니다.Aeson : "문자열을 기대할 때 대신 객체가 발생했습니다"
module JSONStuff where
import qualified Data.Aeson as JSON
import qualified Data.ByteString.Lazy.Char8 as Char
main :: IO()
main = do
input <- Char.getContents
case JSON.eitherDecode input of
Left err -> putStrLn $ "Bad JSON: " ++ err
Right value -> do
putStrLn "Got:"
putStrLn value
내가이 JSON 조각이 (JSONLint 말한다하는 괜찮습니다) :
{
"foo": 123
}
내가이 프로그램은 입력과 함께, 내가 얻을 때 :
$ cat examples/object.json | runhaskell Main.hs
Bad JSON: when expecting a String, encountered Object instead
난에서 테스트 파일이 있고 빈 배열 인 경우 "대신 Array가 발생했습니다"라고 표시됩니다.
그래서 여기에 일종의 변환 단계가 빠져 있거나 표준 입력을 잘못 읽었습니다. 어떻게 생각해? ,
putStrLn value
putStrLn
의 유형 String -> IO()
이므로 value
의 종류 String
로 추정되므로, 문자열에 대한 FromJSON
인스턴스가 사용될 만 스트링을 디코딩한다 :
코드를 SO의 마크 업에 삽입했습니다. 게시물의 '수정'을 클릭하면 어떻게 할 수 있는지 예를 볼 수 있습니다. SO는 코드를 표시하기 위해 각 코드 행 앞에 4 개의 공백을 사용합니다 (코드 다운과 유사 함). 선택적으로 코드 앞에''태그를 추가하여 사용할 구문 강조를 지정할 수 있습니다. 그것은 당신의 코드가 주 태그가 무엇이든간에 강조 표시되어야한다고 추측합니다, 그래서 당신이 haskell 태그에 게시한다면, 그것은 하스켈 구문을 가정 할 것입니다. – bheklilr
감사합니다. 너무 복잡하지는 않지만 실행해야하고 "잘 코드가 컴파일되지 않으므로 문제가 있습니다."라고 말하기를 원하지 않았습니다. :-) – AndrewO