JSON 데이터로 작업할 때 중첩 구조를 접하는 것이 일반적입니다. 이러한 계층적 조직은 명확성을 제공할 수 있지만 특정 데이터에 효율적으로 액세스하는 것을 어렵게 만들 수도 있습니다. 이 프로세스를 단순화하려면 중첩된 JSON 응답을 평면화하는 것이 도움이 될 수 있습니다.
Go에서 중첩된 JSON 응답을 평면화하려면 원하는 구조체 유형에 대해 사용자 지정 UnmarshalJSON 함수를 구현하는 것이 좋습니다. . 이 함수를 사용하면 역마샬링 프로세스를 처리하고 이에 따라 데이터를 변환할 수 있습니다.
제공된 Go 코드에서 Social 구조체는 원하는 평면화된 형식을 나타냅니다.
<code class="go">type Social struct { GooglePlusPlusOnes uint32 `Social:"GooglePlusOne"` TwitterTweets uint32 `json:"Twitter"` LinkedinShares uint32 `json:"LinkedIn"` PinterestPins uint32 `json:"Pinterest"` StumbleuponStumbles uint32 `json:"StumbleUpon"` DeliciousBookmarks uint32 `json:"Delicious"` FacebookLikes uint32 `json:"??some_magical_nested_address??"` FacebookShares uint32 `json:"??some_magical_nested_address??"` FacebookComments uint32 `json:"??some_magical_nested_address??"` FacebookTotal uint32 `json:"??some_magical_nested_address??"` }</code>
중첩된 Facebook을 평면화하려면 데이터의 경우 다음과 같이 UnmarshalJSON 함수를 구현할 수 있습니다.
<code class="go">func (s *Social) UnmarshalJSON(data []byte) error { type SocialTemp struct { GooglePlusPlusOnes uint32 `json:"GooglePlusOne"` TwitterTweets uint32 `json:"Twitter"` LinkedinShares uint32 `json:"LinkedIn"` PinterestPins uint32 `json:"Pinterest"` StumbleuponStumbles uint32 `json:"StumbleUpon"` DeliciousBookmarks uint32 `json:"Delicious"` Facebook struct { FacebookLikes uint32 `json:"like_count"` FacebookShares uint32 `json:"share_count"` FacebookComments uint32 `json:"comment_count"` FacebookTotal uint32 `json:"total_count"` } `json:"Facebook"` } var temp SocialTemp if err := json.Unmarshal(data, &temp); err != nil { return err } *s = Social{ GooglePlusPlusOnes: temp.GooglePlusPlusOnes, TwitterTweets: temp.TwitterTweets, LinkedinShares: temp.LinkedinShares, PinterestPins: temp.PinterestPins, StumbleuponStumbles: temp.StumbleuponStumbles, DeliciousBookmarks: temp.DeliciousBookmarks, FacebookLikes: temp.Facebook.FacebookLikes, FacebookShares: temp.Facebook.FacebookShares, FacebookComments: temp.Facebook.FacebookComments, FacebookTotal: temp.Facebook.FacebookTotal, } return nil }</code>
이 구현에서는 임시 구조체(SocialTemp)를 사용하여 처음에 데이터를 비정렬화합니다. 그런 다음 반환하기 전에 평면화된 값을 원하는 소셜 구조체로 추출합니다.
대체 접근 방식은 답변에 제공된 Flatten과 같은 유틸리티 함수를 활용하는 것입니다.
<code class="go">func Flatten(m map[string]interface{}) map[string]interface{} { o := make(map[string]interface{}) for k, v := range m { switch child := v.(type) { case map[string]interface{}: nm := Flatten(child) for nk, nv := range nm { o[k+"."+nk] = nv } default: o[k] = v } } return o }</code>
다음 유틸리티 함수를 적용할 수 있습니다.
<code class="go">var jsonBlob = []byte(`[ {"StumbleUpon":0,"Reddit":0,"Facebook":{"commentsbox_count":4691,"click_count":0,"total_count":298686,"comment_count":38955,"like_count":82902,"share_count":176829},"Delicious":0,"GooglePlusOne":275234,"Buzz":0,"Twitter":7346788,"Diggs":0,"Pinterest":40982,"LinkedIn":0} ]`) var flatJson = Flatten(json.Unmarshal(jsonBlob))</code>
이렇게 하면 원하는 데이터 구조가 포함된 평면화된 지도가 생성됩니다.
위 내용은 Go에서 중첩된 JSON 응답을 어떻게 평면화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!