Heim >Backend-Entwicklung >Golang >Wie entmarshaliere ich JSON-Arrays unbekannter Größe in Go?

Wie entmarshaliere ich JSON-Arrays unbekannter Größe in Go?

DDD
DDDOriginal
2024-12-12 12:43:13516Durchsuche

How to Unmarshal JSON Arrays of Unknown Size in Go?

Unmarshalling von JSON mit Arrays unbekannter Größe

Beim Abrufen von Daten über JSON kommt es häufig vor, dass der zurückgegebene JSON möglicherweise einen hat oder nicht Array. Wenn Sie beispielsweise eine Liste intelligenter Zähler anfordern, wird diese möglicherweise als einzelnes Element unter „gwrcmd“ empfangen. Wenn jedoch der Stromverbrauch angefordert wird, wird er möglicherweise als Array von „gwrcmds“ zurückgegeben.

Diese Mehrdeutigkeit stellt eine Herausforderung beim Marshalling dar, da Go-Strukturen explizite Definitionen für Arrays und einzelne Elemente erfordern. Um dieses Problem zu beheben, kann json.Unmarshal verwendet werden, um entweder eine einzelne Struktur { } oder ein Array []struct { } basierend auf der JSON-Struktur zurückzugeben.

Bei json.Unmarshal kann jedoch ein Fehler auftreten, wenn das erwartet wird Typkonflikte mit der JSON-Struktur. Um dieses Problem zu beheben, kann eine zweite Struktur erstellt werden, die die erste dupliziert, mit der Ausnahme, dass ein Slice für „Gwrcmd“ verwendet wird. Alternativ besteht ein robusterer Ansatz darin, json.RawMessage zu verwenden, um den JSON-Wert unbekannten Typs zu erfassen und basierend auf seinem Inhalt ein weiteres Unmarshalling durchzuführen. Dies vermeidet das Rätselraten, den Array-Typ ausschließlich anhand des ersten Bytes zu bestimmen.

Beispiele für beide Ansätze werden in den bereitgestellten Go-Codeausschnitten demonstriert. Darüber hinaus werden relevante Ressourcen zur weiteren Erkundung aufgeführt.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich JSON-Arrays unbekannter Größe in Go?. 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