Как вы демаршируете часть байтового массива с одним json .Unmarshal? - PullRequest
0 голосов
/ 09 февраля 2020

Ответ на запрос, который я получаю, всегда является байтовым массивом, который может быть преобразован в массив Q некоторого типа, и я хочу только разархивировать первый элемент в ответе на запрос в объект неизвестного типа (interface{}) , так что это то, что у меня есть, и это работает.

res = Query(query)
data := struct {
    Q []json.RawMessage `json:"q"`
}{}
json.Unmarshal(res.Json, &data)
json.Unmarshal(data.Q[0], &object)

Проблема в том, что сначала я unmarshal res в массив json.RawMessage, затем я могу unmarshal первый элемент в object. Необходимость демаршалирования, а затем демаршалдинг снова кажется излишним. Есть ли более эффективное решение, в котором я могу просто разархивировать один раз?

1 Ответ

0 голосов
/ 09 февраля 2020

Декодирование в эту структуру:

data := struct {
    Q [1]interface{} `json:"q"`
}{
    [1]interface{}{&object},
}
if err := json.Unmarshal(res.Json, &data); err != nil {
     // handle error
}

Декодер декодирует один элемент массива до значения, на которое указывает объект.

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