Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh meratakan data JSON bersarang ke dalam struktur tahap tunggal menggunakan fungsi UnmarshalJSON tersuai dalam Go?

Bagaimanakah saya boleh meratakan data JSON bersarang ke dalam struktur tahap tunggal menggunakan fungsi UnmarshalJSON tersuai dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-28 14:49:02288semak imbas

How can I flatten nested JSON data into a single level structure using custom UnmarshalJSON functions in Go?

Meratakan JSON Bersarang

Meratakan data JSON bersarang ke dalam struktur satu tahap ialah tugas biasa dalam pemprosesan data. Begini cara anda boleh mencapai ini dalam Go menggunakan fungsi UnmarshalJSON tersuai:

UnmarshalJSON Function

Fungsi UnmarshalJSON tersuai membenarkan struct Go mengendalikan penyahmarshalan data JSON. Berikut ialah struct Sosial anda yang dikemas kini dengan pelaksanaan UnmarshalJSON:

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

    // Custom unmarshalling for the Facebook fields
    FacebookLikes       uint32 `json:"-"`
    FacebookShares      uint32 `json:"-"`
    FacebookComments    uint32 `json:"-"`
    FacebookTotal       uint32 `json:"-"`
}

// UnmarshalJSON implements the Unmarshaler interface for custom JSON unmarshalling
func (s *Social) UnmarshalJSON(data []byte) error {
    type FacebookAlias Facebook
    aux := &struct {
        Facebook FacebookAlias `json:"Facebook"`
    }{}

    if err := json.Unmarshal(data, aux); err != nil {
        return err
    }

    s.FacebookLikes = aux.Facebook.FacebookLikes
    s.FacebookShares = aux.Facebook.FacebookShares
    s.FacebookComments = aux.Facebook.FacebookComments
    s.FacebookTotal = aux.Facebook.FacebookTotal
    return nil
}</code>

Penggunaan

Dengan struct Sosial yang dikemas kini, anda kini boleh menyahmarshal dokumen JSON anda dan meratakannya:

<code class="go">package main

import (
    "encoding/json"
    "fmt"
)

type Social struct {
    // ... (same as before)
}

func (s *Social) UnmarshalJSON(data []byte) error { // ... (same as before) }

func main() {
    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, &social)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v", social)
}</code>

Kod ini akan mengeluarkan struktur JSON rata yang anda inginkan, dengan medan Facebook digabungkan ke dalam struktur Sosial peringkat atas.

Atas ialah kandungan terperinci Bagaimanakah saya boleh meratakan data JSON bersarang ke dalam struktur tahap tunggal menggunakan fungsi UnmarshalJSON tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn