ホームページ  >  記事  >  バックエンド開発  >  Go でネストされた JSON をフラット化する方法?

Go でネストされた JSON をフラット化する方法?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-27 04:01:30894ブラウズ

How to Flatten Nested JSON in Go?

ネストされた JSON の平坦化

ネストされた JSON 応答を単一レベルに平坦化し、ネストされた Facebook タイプを削除したいと考えています。 。これを実現するには、カスタム UnmarshalJSON 関数を利用できます。ただし、よりシンプルで柔軟な解決策は、平坦化関数を使用することです。

カスタム平坦化関数

<code class="go">// Flatten takes a map and returns a new one where nested maps are replaced
// by dot-delimited keys.
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>

平坦化関数の使用< /h3>

Go コード内:

<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 social []Social
err := json.Unmarshal(jsonBlob, &amp;social)
if err != nil {
    fmt.Println("error:", err)
}

for _, s := range social {
    socialMap := Flatten(s)
    fmt.Printf("%+v\n", socialMap)
}</code>

出力例

フラット化されたソーシャル マップを使用すると、次のようになります。

map[StumbleUpon:0 Reddit:0 Facebook.commentsbox_count:4691 Facebook.click_count:0 Facebook.total_count:298686 Delicious:0 GooglePlusOne:275234 Buzz:0 LinkedIn:0 Facebook.comment_count:38955 Facebook.like_count:82902 Facebook.share_count:176829 Twitter:7346788 Diggs:0 Pinterest:40982]

この出力は、「Facebook....」としてアクセス可能なすべての Facebook フィールドを含むフラット化されたソーシャル マップを示しています。

このアプローチは、JSON 応答をフラット化する一般的な方法を提供します。ネストされた型の必要性がなくなりました。

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

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