2014-01-25 2 views
7

는 : 예컨대, 쉽게 아무것도 값을 생략 내가 컴팩트 JSON을 유지하기 위해 빈 목록을도를 생략하고 싶은aeson deriveJSON을 사용하여 빈 목록을 생략하는 방법은 무엇입니까? 아이손을 사용

data Person = 
    Person { 
    ssn :: Maybe Text, 
    phone :: [Text] 
    } 

$(deriveJSON defaultOptions{omitNothingFields=True} ''Person) 

입니다 deriveJSON. 수동 롤링 인스턴스가 아닌 deriveJSON을 사용하여 빈 목록을 생략 할 수 있습니까?

+5

아마 타입을 'Maybe (NonEmptyList a)'로 변경하고 적절한 To/FromJSON 설정을 쓸 수 있습니다. 나는 당신이 전달하려고하는 정보의 종류를 더 분명하게 인코딩한다고 생각합니다. –

답변

1

나는 현재 그렇게 할 수 없다고 생각합니다.

나는 개체의 구조가 유형과 대략 일치해야한다는 철학을 따른다. 그 시점에서 {... phone: [] ...} 또는 심지어 존재하지 않는 필드에 대해 {... phone: null ...}을 갖는 것은 개체에서 벗어나는 것보다 "형식이"있습니다.

JSON을 "컴팩트하게"유지하려는 이유가 우아함이 아니라 예를 들어. 대역폭 이유, gzip 또는 JSONH과 같은 것은 개체의 구조를 변경하지 않고도 거의 동일한 절약을 투명하게 달성 할 수 있습니다.