Wie dekodiere ich JSON mit dynamisch verschachtelten Strukturen in Golang?

DDD
Freigeben: 2024-11-17 08:46:03
Original
466 Leute haben es durchsucht

How to Decode JSON with Dynamic Nested Structures in Golang?

JSON Nested Dynamic Structures Go Decoding

Bei der Arbeit mit JSON-Daten, die dynamische oder unbekannte Feldnamen innerhalb verschachtelter Strukturen enthalten, kommt es häufig zu Begegnungen. Dies kann eine Herausforderung darstellen, wenn versucht wird, die Daten genau zu deserialisieren und zu verarbeiten.

Beispieldaten

Berücksichtigen Sie die folgenden JSON-Daten, die nach einer Serveranfrage empfangen wurden:

{
    "status": "OK",
    "status_code": 100,
    "sms": {
        "79607891234": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79035671233": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        },
        "79105432212": {
            "status": "ERROR",
            "status_code": 203,
            "status_text": "Нет текста сообщения"
        }
    },
    "balance": 2676.18
}
Nach dem Login kopieren

Benutzerdefinierte Typdefinitionen

Um diese dynamische Struktur zu handhaben, benutzerdefiniert Typdefinitionen können verwendet werden:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string     `json:"status"`
    StatusCode int        `json:"status_code"`
    Sms        []SMSPhone `json:"sms"`
    Balance    float64    `json:"balance"`
}
Nach dem Login kopieren

Verwendung von Karten

Da das SMS-Objekt im JSON über dynamische Schlüssel verfügt, kann es mithilfe einer Karte mit dem Telefon modelliert werden Zahlen als Schlüssel und die SMSPhone-Struktur als Werte:

type SMSPhone struct {
    Status     string `json:"status"`
    StatusCode int    `json:"status_code"`
    StatusText string `json:"status_text"`
}

type SMSSendJSON struct {
    Status     string              `json:"status"`
    StatusCode int                 `json:"status_code"`
    Sms        map[string]SMSPhone `json:"sms"`
    Balance    float64             `json:"balance"`
}
Nach dem Login kopieren

Unmarshaling

Wenn die benutzerdefinierten Typen definiert sind, können die Daten wie folgt unmarshaled werden:

var result SMSSendJSON

if err := json.Unmarshal([]byte(src), &result); err != nil {
    panic(err)
}
fmt.Printf("%+v", result)
Nach dem Login kopieren

Das Ergebnis ist in einem ordnungsgemäß deserialisierten Objekt mit den dynamischen Telefonnummern als Schlüssel im Ergebnis.Sms Karte.

Verwandte Fragen

  • So analysieren/deserialisieren Sie einen dynamischen JSON in Golang
  • Wie entmarshalieren Sie JSON mit unbekannten Feldnamen zur Strukturierung? in Golang?
  • Unmarshalieren Sie JSON mit unbekannt Felder
  • JSON-String in eine Struktur aussortieren, die ein Element der Struktur selbst enthält

Das obige ist der detaillierte Inhalt vonWie dekodiere ich JSON mit dynamisch verschachtelten Strukturen in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage