Heim  >  Artikel  >  Backend-Entwicklung  >  Wie dekodiere ich JSON mit dynamisch verschachtelten Strukturen in Golang?

Wie dekodiere ich JSON mit dynamisch verschachtelten Strukturen in Golang?

DDD
DDDOriginal
2024-11-17 08:46:03467Durchsuche

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
}

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

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

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)

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!

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