Unmarshal одноэлементный список JSON в одну вложенную структуру - PullRequest
1 голос
/ 12 марта 2019

У меня есть 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но не страдает ли это снижение производительности?Какой самый эффективный способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...