Heim > Artikel > Backend-Entwicklung > Verwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache
Go lang kann nicht zum Parsen von verschachteltem JSON in ein Strukturobjekt verwendet werden
Ich habe einen verschachtelten JSON-String und möchte ihn mithilfe von Strukturen in der Go-Sprache analysieren. json sieht so aus
{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}
Ich möchte JSON mit der Go-Sprache analysieren. json hat eine verschachtelte Struktur, daher habe ich die im folgenden Code erwähnte Struktur erstellt
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := `{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) // this prints correctly as "add" fmt.println(model.business.listid) // this prints correctly as "123" fmt.println(model.business.objecttags) // this does not print the objecttags. rather this prints the objecttags as "[{ []} { []}]" }
Ich kann den Wert des inneren verschachtelten JSON nicht in die Struktur übernehmen.
Ich habe auch versucht, die innere Struktur noch einmal zu entpacken
var object []objecttagslist //this gives error as cannot convert model.business.objecttags (variable of type []objecttagslist) to type []byte json.unmarshal([]byte(model.business.objecttags), &object)
//Fehler, model.business.objecttags (Variable vom Typ []objecttagslist) kann nicht in den Typ []Byte
konvertiert werdenfmt.println(object)
Das gibt mir einen Fehler model.business.objecttags (Variable vom Typ []objecttagslist) kann nicht in den Typ []byte konvertiert werden.
Wie ordne ich diesen JSON einer Struktur zu? Ich möchte es so abbilden, dass ich Objekte wie
verwenden kannmodel.Business.ObjectTags[0].tagCode //--> Should print/store "csharp" model.Business.ObjectTags[0].tagValue[0] //--> Should print/store "2"
Bitte helfen Sie
Sie können nur „exportierte“ Felder marshalieren/unmarshalieren – d. h. Felder, auf die außerhalb des aktuellen Pakets zugegriffen werden kann, was in go „Felder bedeutet, die mit einem Großbuchstaben beginnen“. Wenn Sie Ihren Code also so ändern würden, dass er wie folgt aussieht:
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := ` { "action": "add", "business": { "listid": 123, "objecttags": [ { "tagcode": "csharp", "tagname": "codename", "tagvalue": [ "2" ], "tagtype": 3 }, { "tagcode": "golang", "tagname": "coding", "tagvalue": [ "3" ], "tagtype": 3 } ] } } ` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) fmt.println(model.business.listid) fmt.println(model.business.objecttags) }
Sie erhalten die Ausgabe:
add 123 [{csharp codename [2]} {golang coding [3]}]
Hier machen wir uns die Tatsache zunutze, dass json
模块会自动将名为 tagcode
的键映射到名为 tagcode
ein Strukturfeld ist, aber eigentlich sollten wir uns im Klaren sein:
type ObjectTagsList struct { TagCode string `json:"tagCode"` TagName string `json:"tagName"` TagValue []string `json:"tagValue"` }
Das obige ist der detaillierte Inhalt vonVerwenden von struct zum Parsen von verschachteltem JSON in der Go-Sprache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!