json.Unmarshal не получается

Если от клиента из браузера

xhr.send(j);

получаю аяксом строку:

j := `{"m": 1, "n": 3, "d": ["22032022", 12.59, 215]}`

То не получается вынуть данные массива, делаю так:

type Inner struct {
    A string   //`json:"A"`
    B float64  //`json:"B"`
    C float64  //`json:"C"`
}

type Outer struct {
    M int8
    N int16
    Data Inner
}

var res Outer

err := json.Unmarshal([]byte(j), &res)
if err != nil {
// print error
fmt.Println(err)
}

fmt.Println("M00: ", j)           //  {"m": 1, "n": 6, "d": ["22032022", 12.59, 215]}
fmt.Println("M01: ", res.M)       //  1
fmt.Println("M02: ", res.N)       //  6
fmt.Println("M03: ", res.Data.A)  //
fmt.Println("M04: ", res.Data.B)  //  0
fmt.Println("M05: ", res.Data.C)  //  0
fmt.Println("M06: ", res)         //  {1 6 { 0 0  }}

Хочу получить (М03:,М04:,М05:) именно из приведенного массива, а не из:

["A":"22032022", "B":12.59, "C":215]

хотя с тэгами, - тоже не получилось .. help, please


Ответы (1 шт):

Автор решения: Kirill Scherba

Получилось решить только так, см. The Go Playground

j := `{"m": 1, "n": 3, "d": ["22032022", 12.59, 215]}`

type Outer struct {
    M int8
    N int16
    D [3]interface{}
}

var res Outer

err := json.Unmarshal([]byte(j), &res)
if err != nil {
    // print error
    fmt.Println(err)
}

fmt.Println("M00: ", j)        //  {"m": 1, "n": 6, "d": ["22032022", 12.59, 215]}
fmt.Println("M01: ", res.M)    //  1
fmt.Println("M02: ", res.N)    //  3
fmt.Println("M03: ", res.D[0]) //  22032022
fmt.Println("M04: ", res.D[1]) //  12.59
fmt.Println("M05: ", res.D[2]) //  215
fmt.Println("M06: ", res)      //  {1 6 { 22032022 12.59 215 }}

Не получается загрузить массив ["22032022", 12.59, 215] в структуру Inner, пришлось ее убрать и использовать массив [3]interface{}

→ Ссылка