# #go
Вопрос:
Я создал пользовательский тип для карты. Я хотел бы разархивировать ответ json массива на карту. Ключевое значение карты меняется каждый раз при получении ответа. Проблема, с которой я сталкиваюсь, заключается в том, что функция unmarshal неправильно сопоставляется с пользовательскими значениями.
type id map[string]yp
type yp struct {
f1 string
f2 int
}
func main() {
data := []byte("[{"unique1":{"f1":"1","f2":"2"}},{"unique2":{"f1":"4","f2":"7"}}]")
var i []id
json.Unmarshal(data,amp;i)
fmt.Printf("%v",i)
}
Комментарии:
1. Ваш JSON имеет
f2
строковый тип, но ваша структура имеетf2
такой жеint
?
Ответ №1:
Поскольку исходным значением для f2
является строка, вам необходимо добавить тег поля:
package main
import (
"encoding/json"
"fmt"
)
var data = []byte(`
[
{
"unique1": {"f1": "1", "f2": "2"}
}, {
"unique2": {"f1": "4", "f2": "7"}
}
]
`)
func main() {
var ids []map[string]struct {
F1 string
F2 int `json:"f2,string"`
}
json.Unmarshal(data, amp;ids)
// [map[unique1:{F1:1 F2:2}] map[unique2:{F1:4 F2:7}]]
fmt.Printf("% vn", ids)
}