Разбор JSON данных в Golang - PullRequest
0 голосов
/ 06 мая 2020

В Go я делаю вызов API и получаю обратно [] байт, полный данных. Когда я распечатываю массив, используя string(res), я вижу необработанный JSON Object. Это выглядит так:

{"success": true, "data": [{"a": 100, "b": 200, "c": 300},{"a": 200, "b": 400, "c": 600}]}

Я также создал структуру, которая выглядит так

type SomethingCool struct {
  A int `json:"a"`
  B int `json:"b"`
  C int `json:"c"`
}

В ответе от API меня волнует только информация, содержащаяся в объекте data. Я хочу сделать l oop над элементами в data и создать новый SomethingCool для каждого объекта. Наконец, я хочу вернуть массив всех структур, которые были созданы в результате цикла через data. Как я могу этого добиться?

1 Ответ

2 голосов
/ 06 мая 2020

Чтобы получить доступ к полю data в JSON, вам необходимо создать аналогичную структуру и декодировать в нее полезные данные JSON.

var incomingJSON struct {
    Data []SomethingCool `json:"data"`
}

Когда вы демаршалируете JSON в эту структуру у вас должен быть доступ к вашим данным в виде фрагмента SomethingCool s.

Полная программа:

package main

import (
    "encoding/json"
    "fmt"
)

type SomethingCool struct {
    A int `json:"a"`
    B int `json:"b"`
    C int `json:"c"`
}

func main() {
    var response = []byte(`{"success": true, "data": [{"a": 100, "b": 200, "c": 300},{"a": 200, "b": 400, "c": 600}]}`)
    var incomingJSON struct {
        Data []SomethingCool `json:"data"`
    }
    if err := json.Unmarshal(response, &incomingJSON); err != nil {
        fmt.Println("Error: ", err)
    } else {
        fmt.Println("Data: ", incomingJSON)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...