ホームページ  >  記事  >  バックエンド開発  >  カスタム UnmarshalJSON 関数を使用して Go でネストされた JSON 構造をフラット化する方法

カスタム UnmarshalJSON 関数を使用して Go でネストされた JSON 構造をフラット化する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 08:04:02552ブラウズ

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

ネストされた JSON の平坦化

Go では、複数レベルのネストを持つ複雑な JSON 構造をナビゲートするのが難しい場合があります。これらのネストされた構造をより合理的な形式にフラット化する必要がある場合、多くの場合、カスタム ソリューションが必要になります。

提示されたシナリオでは、タスクは、ネストされたソーシャル タイプを含む JSON 応答を、さらにネストされたソーシャル タイプを含む JSON 応答をフラット化することです。フェイスブックタイプ。目標は、中間の Facebook タイプを排除し、そのプロパティを Social タイプにフラット化することです。

カスタム 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>

Flatten Helper Function

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>

このアプローチを使用すると、ネストされた Facebook タイプが削除され、そのプロパティが Social タイプにフラット化され、より簡潔で管理しやすいデータ構造になります。

以上がカスタム UnmarshalJSON 関数を使用して Go でネストされた JSON 構造をフラット化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。