Unmarshal json-Array zu struct

8

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?

    
Alexander Ponomarev 20.03.2014, 09:39
quelle

3 Antworten

1

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:

%Vor%

Hier ist das vollständige Beispiel: Ссылка

    
Abyx 28.10.2015 12:46
quelle
1

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:

%Vor%     
Abyx 29.10.2015 10:30
quelle
-1

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:

%Vor%

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.

    
tike 20.03.2014 09:54
quelle

Tags und Links