распарсить json с переменным количество полей
Подскажите как распарсить json с переменным количеством полей? Я пробую вот так:
jsonData := []byte(`{"key1":"val1","key2":"val2","key3":"val3"}`)
var jsonObj interface{}
err := json.Unmarshal(jsonData, &jsonObj)
if err != nil {
log.Println(err)
}
type pair struct {
key string
val string
}
// var pairs []pair
pairs, ok := jsonObj.([]pair)
if !ok {
log.Println("JSON document is not an array of pair")
return
}
Это не работает, приведение к []pair не проходит(
Как все таки правильно распарсить такой json, если количество key=val в json может быть любым?
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
В вашем случае это будет map[string]string:
const rawData = `{"key1":"val1","key2":"val2","key3":"val3"}`
var data map[string]string
err = json.NewDecoder(strings.NewReader(rawData)).Decode(&data)
// Check err.
fmt.Printf("%#v\n", data)
map[string]string{"key1":"val1", "key2":"val2", "key3":"val3"}
Если же у вас там и типы разные, то это
map[string]interface{} с дальнейшими утверждениями типов
(англ. «type assertions»).