gpt4 book ai didi

json - Go:在 for 循环中使用 JSON Unmarshal

转载 作者:行者123 更新时间:2023-12-01 22:08:00 24 4
gpt4 key购买 nike

我是 Go 新手,我的代码在 for 循环中多次使用 json.Unmarshal 时遇到问题。

在这段代码中,前两个函数从 url 获取响应,将其转换为字节格式,然后将其解码为数据。最后一个函数遍历一个 url 列表,并且应该依次解码它们,每次都附加一个带有一组航类代码的数组。

使用我在这里使用的结构集,我可以将 getFlightData 用于单个 url,它将打印一组航类代码。但是,当在 for 循环中尝试相同的操作时,数组 flightToSunnyCities 将打印一组方括号,其中包含空格。在迭代时在 for 循环中打印 thisNumber 将类似地打印空白空间。

var data ScheduledFlight

func UnmarshalBodyToPointerFlight(Body []byte, welcome *ScheduledFlight) {
err2 := json.Unmarshal(Body, &welcome)
if err2 != nil {
fmt.Println(err2)
os.Exit(1)
}
}

func GetFlightData(url string) *ScheduledFlight {
res := FetchResponse(url)
body := ResponseBodyToByte(res)
UnmarshalBodyToPointerFlight(body, &data)
return &data
}

func UnmarshalFlightStatsURL() []string {
urlList := listOfURL()
var flightsToSunnyCities []string
for _, item := range urlList {

var flightStats *ScheduledFlight = GetFlightData(item)
var thisNumber string = flightStats.FlightNumber
flightsToSunnyCities = append(flightsToSunnyCities, thisNumber)

}
fmt.Println(flightsToSunnyCities)
return flightsToSunnyCities
}

我正在使用的结构如下所示:
type Welcome struct {
ScheduledFlights []ScheduledFlight `json:"scheduledFlights"`
}

type ScheduledFlight struct {
CarrierFSCode string `json:"carrierFsCode"`
FlightNumber string `json:"flightNumber"`
DepartureAirportFSCode string `json:"departureAirportFsCode"`
ArrivalAirportFSCode string `json:"arrivalAirportFsCode"`
}

我怀疑这个问题是由 ScheduledFlights 引起的属于 []ScheduledFlight 类型这需要考虑,但是我不知道解决方案是什么。如果有人有任何建议,将不胜感激,谢谢。

最佳答案

您解码以下 JSON 输入的方式是错误的:

func UnmarshalBodyToPointerFlight(Body []byte, welcome *ScheduledFlight){
err2 := json.Unmarshal(Body, &welcome)

函数 UnmarshalBodyToPointerFlight得到一个指针 ScheduledFlight ,并且您希望将数据解码到该指针指向的位置。为此,您必须调用:
err2 := json.Unmarshal(Body, welcome)

你这样做的方式是覆盖 welcome指针(不是它指向的位置)并解码到新位置,因为您将指针传递给指针。因此,您最终会将空字符串附加到数据中。

关于json - Go:在 for 循环中使用 JSON Unmarshal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59901214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com