2013-08-23 16 views
19

ho una stringa JSON come segue:Golang analizzare un JSON con DYNAMIC chiave

j := `{"bvu62fu6dq": { 
      "name": "john", 
      "age": 23, 
      "xyz": "weu33s" 
      ..... 
      .....} 
     }` 

Voglio estrarre il valore di name e age dall'alto stringa JSON. Ho guardato questo esempio dato al sito di golang http://play.golang.org/p/YQgzP7KPp9

Ma il mio problema è che la chiave di JSON al livello più alto è dinamica. Ciò significa che bvu62fu6dq è dinamico. Ho creato struct come questo:

type Info struct { 
    UniqueID map[string]string 
} 

Ma non è sicuro come estrarre name e age. Il mio codice è a http://play.golang.org/p/Vbdkd3XIKc

+0

Eventuali duplicati di [Come per analizzare/deserlizzare un JSON dinamico in Golang] (https://stackoverflow.com/questions/29347092/how-to-parse-deserlize-a-dynamic-json-in-golang) – Flimzy

risposta

32

Credo che si desidera qualcosa di simile:

type Person struct { 
    Name string `json:"name"` 
    Age int `json:"age"` 
} 

type Info map[string]Person 

Poi, dopo la decodifica questo funziona:

fmt.Printf("%s: %d\n", info["bvu62fu6dq"].Name, info["bvu62fu6dq"].Age) 

esempio completa: http://play.golang.org/p/FyH-cDp3Na

+0

Come ho detto, il mio k ey è dinamico e non sarà sempre 'bvu62fu6dq', quindi non posso usare' info ["bvu62fu6dq"]. Name' – JVK

+3

Certo, e info è una mappa normale. È possibile scorrere tutte le chiavi o accedere a qualsiasi tasto specifico, come al solito per le mappe –

+0

. Grazie. – JVK