распарсить 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»).

→ Ссылка