2016-05-26 5 views
0

Ich habe ein JSON-Objekt ähnlich wie diesen:Wie entpacken Sie diese geschachtelte JSON in go-Objekte?

{ 
"prices": { 
    "7fb832f4-8041-4fe7-95e4-6453aeeafc93": { 
     "diesel": 1.234, 
     "e10": 1.234, 
     "e5": 1.234, 
     "status": "open" 
    }, 
    "92f703e8-0b3c-46da-9948-25cb1a6a1514": { 
     "diesel": 1.234, 
     "e10": 1.234, 
     "e5": 1.234, 
     "status": "open" 
    } 
} 

Ich bin nicht sicher, wie diese in ein GO Objekt unmarshal ohne das eindeutige ID-Feld jeden Unterpunktes zu verlieren, das für mich wichtige Informationen.

Antwort

7

Sie können eine map mit String-Schlüssel verwenden, um die eindeutigen IDs der einzelnen Teilpreis zu erhalten:

type Object struct { 
    Prices map[string]*Price `json:"prices"` 
} 

type Price struct { 
    Diesel float32 `json:"diesel"` 
    E10 float32 `json:"e10"` 
    E5  float32 `json:"e5"` 
    Status string `json:"status"` 
} 

Dann zum Beispiel, könnten Sie Schleife über die unmarshal Objekt:

for id, price := range o.Prices { 
    fmt.Printf("%s %v\n", id, price) 
} 

https://play.golang.org/p/aPhvGdtFC_

+0

Vielen Dank. Das hat mir geholfen zu verteilen! – Alexander

2

Verwenden Sie eine Karte:

type Station struct { 
    Diesel float64 
    E10 float64 
    E15 float64 
    Status string 
} 

type Data struct { 
    Prices map[string]*Station 
} 

playground example

+0

Fügen Sie JSON-Tags hinzu, da keine Übereinstimmung zwischen den JSON-Schlüsseln und den Feldern Ihrer Strukturen besteht. –

+1

@ T.Claverie Die Feldtags werden nicht benötigt. Siehe https://play.golang.org/p/z4-jkO8jPl –

+0

Ich wusste das nicht, ich dachte, es war Groß-und Kleinschreibung. Vielen Dank ! –

Verwandte Themen