2017-10-18 8 views
0

Aeson 라이브러리를 사용하여 json을로드하려고합니다. 것은 내가 그것을로드하고자하는 데이터 구조가 json보다 더 많은 필드를 포함하고 있다는 것이다.aeson을 사용하여 json에서 사용할 수없는 필드의 기본값을 지정하십시오.

여기서 json에서는 이름과 파일 필드 만 사용할 수 있습니다. 사진은 광택 사진이므로 json에서 실제로로드 할 수 없습니다.

어떻게하면 res를 제거하고 FromJSON 인스턴스 밖으로로드 할 수 있는지 알 수 없습니다.

+0

그 정보는 JSON 입력이 아닌 곳에서 왔습니까? – leftaroundabout

+0

사진은 json을 읽은 후에 나중에로드되며 그 시간에로드 된 필드도 설정됩니다. 로드 된 것은 기본적으로 false 일 수 있다고 추측하지만, 어떻게해야 할 것인가가 문제입니다. – blackwolf123333

+1

그러나 그림이로드되지 않을 때'res'의 값은 무엇입니까? 이것은 java가 아니기 때문에 'null'이 될 수 없으며 그림이어야합니다. 'null '이 될 수 있기를 원한다면, 타입을'Maybe Picture'로 변경해야합니다. – jpath

답변

4

JSON에서 해당 구조를로드 할 수없는 경우이 방법으로 정의하지 마십시오! 확인하십시오.

data ResourceRef = ResRef 
       { name :: String 
       , file :: FilePath 
       } deriving (Generic, Show) 

JSON에서 쉽게로드 할 수 있습니다. 그러면 추가로 가질 수 있습니다.

data Resource = Res 
       { resName :: String 
       , resFile :: FilePath 
       , res :: Picture 
       } deriving (Generic, Show) 

... 절대로 JSON과 접촉하지 않습니다. 구현하기

loadResource :: ResourceRef -> IO Resource 
+0

그냥 33 초 전에 기본적으로 동일한 답변을 썼습니다 :) –

+0

고마워, 나는 거의 이런 일을 실제로 끝냈다 – blackwolf123333

+0

나는 후속 질문을 묻는다? 현재 readFile이 ByteString을 출력하지 않기 때문에 현재 파일 내용을 읽는 방법이 엉망입니다. 내가 어떻게 고칠 수 있니? – blackwolf123333