2014-02-17 2 views
5

Я новичок в Go и пытаюсь декодировать json blob через кормушки для Unmarshal. Проблема в том, что я не знаю определенных ключей. Я могу разобрать следующееДекодирование JSON в Go без всех имен клавиш

{"age":21,"Travel":{"fast":"yes","sick":false} } 

как так

type user struct { 
    Age int 
    Travel TravelType 
} 

type TravelType struct { 
    Fast string 
    Sick bool 
} 


func main() { 
    src_json := []byte(`{"age":21,"travel":{"fast":"yes","sick":false}}`) 
    u := user{} 
    err := json.Unmarshal(src_json, &u) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Printf("%v", u) 

} 

получить {21 {yes false}}

Однако, я не вижу, как я бы подойти что-то вроде this-

{ 
    "age":21, 
    "Travel": 
    { 
     "canada": 
     {"fast":"yes","sick":false}, 
     "bermuda": 
     {"fast":"yes","sick":false}, 
     "another unknown key name": 
     {"fast":"yes","sick":false}, 
    } 
} 

без Явно объявление «Канада», «Бермудские острова» и т. д. в структурах. Как я могу использовать Unmarshal для разбора вышеупомянутого json? Я нашел это answer, но не вижу, как он может быть реализован.

ответ

6

Вы можете развязать в map[string]TravelType. Измените user-структуру для этого, и вы должны быть хорошо идти:

type user struct { 
     Age int 
     Travel map[string]TravelType 
} 

Вот рабочая проверка концепции на Go Playground: http://play.golang.org/p/-4k9GE5ZlS

+0

Отлично, большое спасибо! – rocketas

Смежные вопросы