2016-08-01 7 views
1

Ich bin in der Lage, ein einfaches JSON-Objekt in eine Struktur zu analysieren, aber wenn ich ein Array innerhalb dieses Objekts zu analysieren versuche, erhalte ich eine index out of range.Laufzeitfehler beim Analysieren eines JSON-Bytedatenstroms mit einem eingebetteten Array

package main 

import (
    "fmt" 
    "encoding/json" 
) 

type jsonobject struct { 
    Objects []ObjectType `json:"objects"` 
} 

type ObjectType struct { 
    Name string `json:"name"` 
} 

func main() { 

    // Simple element 
    bytes := []byte(`{ "name": "foo" }`) 
    var objecttype ObjectType 
    json.Unmarshal(bytes, &objecttype) 
    fmt.Printf("Results: %v\n", objecttype.Name) // Results: localhost 

    // Object with embedded array 
    bytes = []byte(`{ "objects": [ "name": "foo" ] }`) 
    jsontype := &jsonobject{} 
    json.Unmarshal(bytes, &jsontype) 
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range 
} 

Antwort

1

Da Ihre JSON-Eingabe nicht das ist, was Sie in Go modellieren. Und so wird das JSON-Array nicht in jsonobject.Objects entfernt: es bleibt nil; Wenn Sie versuchen, es zu indexieren, wird index out of range Fehler angezeigt.

Versuchen von diesem unmarshal:

bytes = []byte(`{ "objects": [ {"name": "foo"} ] }`) 

anzumerken, dass die Elemente (ein Element, in diesem Fall) in dem JSON Array sind auch in Klammern (JSON Objekt).

Versuchen Sie es auf der Go Playground.

+0

Vielen Dank! Ich erkannte meinen Fehler, sobald ich die Klammern sah, die Sie um das Element innerhalb des Arrays hinzugefügt hatten. – Laurent