Heim >Backend-Entwicklung >Golang >Wie kann ich bestimmte JSON-Werte in Go effizient extrahieren, ohne Strukturen zu verwenden?

Wie kann ich bestimmte JSON-Werte in Go effizient extrahieren, ohne Strukturen zu verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-27 12:46:16345Durchsuche

How Can I Efficiently Extract Specific JSON Values in Go Without Using Structs?

JSON-Wertanalyse in Go

In manchen Fällen ist das Extrahieren eines bestimmten Werts aus einem JSON-Objekt ohne die Notwendigkeit einer Struktur von Vorteil. In diesem Artikel wird untersucht, wie dies in Go erreicht werden kann, und er bietet Alternativen zum traditionelleren Ansatz, zuerst das Unmarshalling in eine Struktur durchzuführen.

Option 1: Map[string]interface{}

Go bietet eine integrierte Lösung zum Speichern von JSON-Werten ohne vordefinierte Struktur. Mit der json.Unmarshal-Funktion können Sie JSON in eine Map[string]interface{} dekodieren, wobei die Schlüssel Zeichenfolgen sind, die die JSON-Feldnamen darstellen, und die Werte die entsprechenden Werte als native Go-Typen sind.

Beispiel:

b := []byte(`{"ask_price": "1.0"}`)
data := make(map[string]interface{})
err := json.Unmarshal(b, &data)
if err != nil {
  panic(err)
}

if price, ok := data["ask_price"].(string); ok {
  fmt.Println(price)
} else {
  panic("wrong type")
}

Mit diesem Ansatz können Sie direkt über den JSON-Eigenschaftsnamen auf den spezifischen Wert zugreifen, den Sie benötigen, ohne dass ein entsprechendes Strukturfeld erforderlich ist. Allerdings sind Typzusicherungen erforderlich, um sicherzustellen, dass der abgerufene Wert der erwartete Typ ist.

Option 2: Benutzerdefinierter Unmarshaler

Alternativ können Sie einen benutzerdefinierten json.Unmarshaler implementieren Schnittstelle für Ihren Zieltyp, um den Decodierungsprozess spezifischer zu handhaben. Dies bietet eine bessere Kontrolle darüber, wie die JSON-Daten in den gewünschten Go-Wert entmarshallt werden.

Beispiel:

type AskPrice struct {
  price string
}

func (a *AskPrice) UnmarshalJSON(data []byte) error {
  var v string 
  if err := json.Unmarshal(data, &v); err != nil {
    return err
  }
  a.price = v
  return nil
}

// ...

Mit diesem Ansatz können Sie den benutzerdefinierten Unmarshaller angeben, indem Sie das entsprechende Strukturfeld mit json:"ask_price" markieren und den &-Zeiger verwenden Empfänger, um sicherzustellen, dass der decodierte Wert direkt dem Strukturfeld zugewiesen wird. Dadurch entfällt die Notwendigkeit expliziter Typzusicherungen und sorgt für ein individuelleres Unmarshalling-Erlebnis.

Durch sorgfältiges Abwägen dieser Optionen können Sie bestimmte JSON-Werte in Go effizient extrahieren, ohne sich auf vordefinierte Strukturen verlassen zu müssen.

Das obige ist der detaillierte Inhalt vonWie kann ich bestimmte JSON-Werte in Go effizient extrahieren, ohne Strukturen zu verwenden?. 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