2013-08-23 14 views
19

Mam ciąg json następująco:Golang analizowania JSON z dynamicznym kluczem

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

chcę wyodrębnić wartość name i age z góry json ciąg. Spojrzałem na ten przykład podany na stronie golang http://play.golang.org/p/YQgzP7KPp9

Ale mój problem jest kluczem w json na najwyższym poziomie jest dynamiczny. Oznacza to, że bvu62fu6dq jest dynamiczny. Stworzyłem struct tak:

type Info struct { 
    UniqueID map[string]string 
} 

Ale nie wiem, jak wydobyć name i age. Mój kod jest http://play.golang.org/p/Vbdkd3XIKc

+0

Możliwy duplikat [Jak analizować/dezaktywować dynamiczny JSON w Golang] (https://stackoverflow.com/questions/29347092/how-to-parse-deserlize-a-dynamic-json-in-golang) – Flimzy

Odpowiedz

32

wierzę chcesz coś takiego:

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

type Info map[string]Person 

Następnie po zdekodowaniu to działa:

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

Pełny przykład: http://play.golang.org/p/FyH-cDp3Na

+0

Jak już powiedziałem, moje ey jest dynamiczny i nie będzie zawsze 'bvu62fu6dq', więc nie mogę użyć' info ["bvu62fu6dq"]. Nazwa ' – JVK

+3

Oczywiście, a informacje to normalna mapa. Możesz iterować po wszystkich klawiszach lub uzyskać dostęp do dowolnego klucza, jak zwykle dla map –

+0

Rozumiem. Dzięki. – JVK

Powiązane problemy