Go의 JSON 마샬링에서 중첩된 빈 구조체 처리
소개
인코딩을 사용하는 경우 /json 구조체를 JSON으로 마샬링하기 위한 Go의 패키지 ",omitempty" 태그를 사용하여 결과 JSON에서 빈 필드를 제외할 수 있습니다. 그러나 이 태그는 중첩된 구조체에 대해 예상대로 작동하지 않을 수 있습니다.
질문
다음 예를 고려하세요.
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ A: ColorGroup{}, } json.Marshal(group)
이 시나리오에서는 A 필드가 비어 있으므로 JSON 출력에는 B 필드만 포함되어야 합니다. 그러나 출력에는 여전히 빈 값({"A": {"Name": "", "Colors": null}, "B": null})이 있는 A 필드가 포함됩니다.
답변
Go의 json 마샬링 문서에는 구조체 필드가 비어 있는 것으로 간주된다고 명시되어 있습니다.
제공된 예에서 group.A는 빈 구조체입니다. nil 포인터나 컬렉션 유형(예: 슬라이스, 맵)이 아닙니다. 따라서 마샬러는 빈 값으로 처리하지 않습니다.
원하는 동작을 달성하려면 중첩된 구조체에 대한 포인터를 사용할 수 있습니다.
type ColorGroup struct { ID int `json:",omitempty"` Name string Colors []string } type Total struct { A *ColorGroup `json:",omitempty"` B string `json:",omitempty"` } group := Total{ B: "abc", } json.Marshal(group)
이러한 수정을 통해 JSON은 출력에는 B 필드만 포함됩니다: {"B": "abc"}.
참고:
위 내용은 Go에서 JSON으로 마샬링할 때 중첩된 빈 구조체를 어떻게 적절하게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!