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{}