Ich habe ein Array von benutzerdefinierten Werten
%Vor%Ich kann die [] Schnittstelle {} entpacken, aber das ist nicht das, was ich will.
Ich möchte dieses Array zu struct
entpacken %Vor%Ist es in Go mit Standard- oder Seitenbibliotheken möglich?
Das ist ein Tupel, und es ist völlig in Ordnung, Tupel in eine Struktur zu entpacken, außer dass encoding/json
dies nicht unterstützt.
Wir können jedoch die folgende Hilfsfunktion verwenden, die über die Felder der Struktur iteriert und sie zurückmarschiert:
%Vor% Sie müssen also nur die Methode UnmarshalJSON
angeben:
Hier ist das vollständige Beispiel: Ссылка
Sie können github.com/ugorji/go/codec verwenden, um Arrays zu einem Array zu entfernen struct:
Kodieren Sie eine Struktur als Array und dekodieren Sie die Struktur aus einem Array im Datenstrom
Obwohl die Bibliothek "Drop-In-Ersatz für encoding / json" ankündigt - geht es nur um das json:
-Tag. Sie müssen also codec.Decoder
anstelle von json.Unmarshal
verwenden:
Da Ihr JSON Werte verschiedener Typen in einem Array enthält, ist es nicht möglich, dies einfach mit go zu analysieren. Wenn Sie steuern, wie die JSON-Eingabe formatiert wird, umschließen Sie die drei Werte in {}
, um ein Objekt zu erhalten:
Dann sollte das Parsen in Ihre Struktur funktionieren.
Wenn Sie keine Kontrolle über den Json-Eingang haben. Analysieren Sie es als [] Schnittstelle {} und weisen Sie die Werte dann Ihrer Struktur manuell zu. Auch wenn dies schwierig werden könnte, abhängig von der Komplexität der möglichen Antworten, die Sie unterstützen möchten.
Bitte beachten Sie, dass dieses Problem auf eine Kernbeschränkung der golangs json Parsing-Methode hinweist und daher - soweit ich weiß - auch nicht von Bibliotheken gelöst werden kann.