>백엔드 개발 >Golang >사용자 정의 UnmarshalJSON 함수를 사용하여 Go에서 중첩된 JSON 구조를 평면화하는 방법은 무엇입니까?

사용자 정의 UnmarshalJSON 함수를 사용하여 Go에서 중첩된 JSON 구조를 평면화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-27 08:04:02667검색

How to Flatten Nested JSON Structures in Go Using Custom UnmarshalJSON Functions?

중첩 JSON 평면화

Go에서는 여러 수준의 중첩이 있는 복잡한 JSON 구조를 탐색하는 것이 어려울 수 있습니다. 이러한 중첩된 구조를 보다 효율적인 형식으로 평면화해야 하는 경우 사용자 지정 솔루션이 필요한 경우가 많습니다.

제시된 시나리오에서 작업은 중첩된 소셜 유형을 포함하는 JSON 응답을 추가 중첩된 형식으로 평면화하는 것입니다. 페이스북형. 목표는 중간 Facebook 유형을 제거하고 해당 속성을 소셜 유형으로 평면화하는 것입니다.

사용자 정의 UnmarshalJSON 함수

이를 달성하기 위해 Go의 UnmarshalJSON 기능을 활용할 수 있습니다. JSON이 구조체로 디코딩되는 방식을 사용자 정의합니다. 중첩된 JSON을 평면화하기 위해 이를 구현하는 방법은 다음과 같습니다.

<code class="go">type Social struct {
    // ... existing properties ...
    FacebookLikes       uint32 `json:"-"`
    FacebookShares      uint32 `json:"-"`
    FacebookComments    uint32 `json:"-"`
    FacebookTotal       uint32 `json:"-"`
}

func (s *Social) UnmarshalJSON(data []byte) error {
    m := make(map[string]interface{})
    if err := json.Unmarshal(data, &m); err != nil {
        return err
    }

    m = Flatten(m)

    // Extract nested Facebook properties
    if fbMap, ok := m["Facebook"].(map[string]interface{}); ok {
        s.FacebookLikes = fbMap["FacebookLikes"].(uint32)
        s.FacebookShares = fbMap["FacebookShares"].(uint32)
        s.FacebookComments = fbMap["FacebookComments"].(uint32)
        s.FacebookTotal = fbMap["FacebookTotal"].(uint32)
    }

    return nil
}</code>

평면화 도우미 기능

평면화 도우미 기능은 중첩된 맵을 제거하고 점으로 구분된 키로 바꾸는 역할을 합니다.

<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>

이 접근 방식을 사용하면 중첩된 Facebook 유형이 제거되고 해당 속성이 소셜 유형으로 평면화되어 더욱 간결하고 관리하기 쉬운 데이터 구조가 됩니다.

위 내용은 사용자 정의 UnmarshalJSON 함수를 사용하여 Go에서 중첩된 JSON 구조를 평면화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.