У меня есть JSON из графической базы данных, и он возвращает только списки.Вот пример запроса и ответа:
{
Course(func: eq(XID, "1")) {
Name
Holes : Hole {
Number
Tee {
Color
Basket @facets(distance) {
Designation
}
}
}
}
}
Этот запрос ищет по идентификатору, поэтому он может возвращать только один результат, но природа бэкэнда базы данных означает, что он всегда будет возвращать список следующим образом:
{
"Course": [
{
"Name": "NAD",
"Holes": [
{
"Number": 1,
"Tee": [
{
"Color": "Blue",
"Basket": [
{
"Designation": "A",
"Basket|distance": "70"
}
]
},
{
"Color": "Red",
"Basket": [
{
"Designation": "A",
"Basket|distance": "69"
}
]
}
]
},
{
"Number": 2,
"Tee": [
{
"Color": "Blue",
"Basket": [
{
"Designation": "A",
"Basket|distance": "79"
},
{
"Designation": "B",
"Basket|distance": "89"
}
]
},
{
"Color": "Red",
"Basket": [
{
"Designation": "A",
"Basket|distance": "79"
},
{
"Designation": "B",
"Basket|distance": "95"
}
]
}
]
}
]
}
]
}
Я хочу разархивировать этот единственный курс в структуру:
type Course struct {
Name string `json:"Name"`
Holes []struct {
Number int `json:"Number"`
Tee []struct {
Color string `json:"Color"`
Basket []struct {
Designation string `json:"Designation"`
BasketDistance string `json:"Basket|distance"`
} `json:"Basket"`
} `json:"Tee"`
} `json:"Holes"`
}
Я попытался создать временную структуру, которая представляет собой просто список курсов для извлечения правильного JSON по индексу, но я получаюдействительно общая ошибка времени выполнения, что объект не может быть демаршалирован к этому типу.
Я полагаю, было бы относительно легко преобразовать его в []map[string]interface{}
, а затем демаршировать в курс, указав тип JSONRawMessageно не страдает ли это снижение производительности?Какой самый эффективный способ решить эту проблему?