[英]How to convert json array and unmarshal it with golang
我有這個json:
{
"data": [
{
"id": 683,
"nome": "Premier League 19/20",
"nomeDaTaca": "Premier League",
"temporada": "2019/2020",
"categoria": "NACIONAL",
"temClassificacao": true,
"temClassificacaoPorGrupo": false,
"tipoDeColeta": "ESTATISTICA_TOTAL",
"faseAtual": "Primeira Fase",
"quantidadeDeEquipes": "20",
"rodadaAtual": 22,
"quantidadeDeRodadas": 38,
"urlLogo": "https://s3-sa-east-1.amazonaws.com/logos.footstast.net/campeonatos/Ingles.png",
"pais": null,
"sde": {
"campeonato_id": null,
"edicao_id": null
}
}
],
"pagination": null
}
我需要使用正確的結構在 go 中“解組”。 我嘗試在許多站點上將其轉換為結構體,但是當我“解組”時,返回 nil。
什么是正確格式的結構以及我如何“解組”到這個結構中。
我需要一個示例如何正確地“解組”。 太棒了!!
我正在使用一些在線示例 API 來展示示例。
下面的虛擬 API 用於獲取員工列表並解析
http://dummy.restapiexample.com/api/v1/employees
使用https://mholt.github.io/json-to-go/從 JSON 生成結構
並查看我已經測試過並為我工作的代碼。 由於 AutoGenerated 有一個 Data 數組,使用var data AutoGenerated
for Unmarshal 您可以使用data.Data
來獲取數組。
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
func main() {
type AutoGenerated struct {
Status string `json:"status"`
Data []struct {
ID string `json:"id"`
EmployeeName string `json:"employee_name"`
EmployeeSalary string `json:"employee_salary"`
EmployeeAge string `json:"employee_age"`
ProfileImage string `json:"profile_image"`
} `json:"data"`
}
url := "http://dummy.restapiexample.com/api/v1/employees"
req, err := http.NewRequest("GET", url, nil)
client := &http.Client{}
res, err := client.Do(req)
if err != nil {
log.Println("Error on response.\n[ERRO] -", err)
}
body, _ := ioutil.ReadAll(res.Body)
var data AutoGenerated
json.Unmarshal([]byte(body), &data)
fmt.Println(data)
}
除此之外,如果您不知道所有預期的鍵值對作為響應
您可以使用以下函數將任何 JSON 數組轉換為 Map 數組,以便在 golang 中輕松迭代或使用
func stringToMap(data string) []map[string]interface{} {
var value []map[string]interface{}
err := json.Unmarshal([]byte(data), &value)
if err != nil {
panic(err)
}
return value
}
首先,我感謝您的幫助。 我的代碼只是為了獲取這個 json 的結果(來自 Restfull API)。
然后我必須反序列化這些數據以將其保存在數據庫中。
我的難點是理解返回 json 結構,其中包含一個頂部數組。
像這樣:
{
"data": [
{
"id": 683,
"nome": "Premier League 19/20",
我的結構:(我使用https://mholt.github.io/json-to-go/ )為我轉換!
type Campeonato struct {
Data []struct {
ID int `json:"id"`
Nome string `json:"nome"`
NomeDaTaca string `json:"nomeDaTaca"`
Temporada string `json:"temporada"`
Categoria string `json:"categoria"`
TemClassificacao bool `json:"temClassificacao"`
TemClassificacaoPorGrupo bool `json:"temClassificacaoPorGrupo"`
TipoDeColeta string `json:"tipoDeColeta"`
FaseAtual string `json:"faseAtual"`
QuantidadeDeEquipes string `json:"quantidadeDeEquipes"`
RodadaAtual int `json:"rodadaAtual"`
QuantidadeDeRodadas int `json:"quantidadeDeRodadas"`
URLLogo string `json:"urlLogo"`
Pais interface{} `json:"pais"`
Sde struct {
CampeonatoID interface{} `json:"campeonato_id"`
EdicaoID interface{} `json:"edicao_id"`
} `json:"sde"`
} `json:"data"`
Pagination interface{} `json:"pagination"`
}
我要解組的代碼:它使用 API,但我無權發布不記名令牌變量。 您可以使用另一個公共 API 作為示例進行說明嗎?
func main() {
url := "http://apifutebol.footstats.net/3.0/campeonatos"
var bearer = " - I don't have permission to publicate it - "
req, err := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", bearer)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Println("Error on response.\n[ERRO] -", err)
}
body, _ := ioutil.ReadAll(resp.Body)
//fmt.Println(string([]byte(body)))
var data []Campeonato
json.Unmarshal([]byte(body), &data)
}
回報是!
非常感謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.