代碼如下供參考:
package main
import (
"encoding/json"
"fmt"
)
// 最内層
type lotsStatus struct { //車位資訊
ParkingSpaceno string `json:"parkingspaceno"` //車位編号
SpaceType int `json:"spacetype"` //車位類型 1:普通車位
ParkingSpaceStatus string `json:"parkingspacestatus"` //車位狀态 Y:占用(有車) N:未占用(無車)
PlateNo string `json:"plateno"` //占用車牌号
Timestamp float64 `json:"timestamp"` //上傳時間戳
}
// 包一層
type dataOne struct {
DataOne []lotsStatus `json:"data"`
}
// 再包一層
type dataTwo struct {
DataTwo dataOne `json:"data"`
}
// 主結構體,也就是最外面的一層
type LotsStatusAll struct {
ReturnCode int `json:"returncode"` //傳回值
Command string `json:"command"` //指令
Errordesc string `json:"errordesc"` //是否成功
Result dataTwo `json:"result"` //傳回值
}
func main() {
var lotsStatus LotsStatusAll
var strLotStatus = `{
"returncode": 0,
"command": "get all park state info",
"errordesc": "成功",
"result": {
"data": {
"data": [
{
"parkingspaceno": "B34",
"spacetype": 2,
"parkingspacestatus": "1",
"plateno": "",
"timestamp": 1617296293.54021
},
{
"parkingspaceno": "13Q-6",
"spacetype": 2,
"parkingspacestatus": "-1",
"plateno": "",
"timestamp": 1617296293.54021
}
]
}
}
}`
err := json.Unmarshal([]byte(strLotStatus), &lotsStatus)
if err != nil {
fmt.Println("error:", err)
} else {
for _, v := range lotsStatus.Result.DataTwo.DataOne {
fmt.Printf("ParkingSpaceStatus:%s ParkingSpaceno:%s\n", v.ParkingSpaceStatus, v.ParkingSpaceno)
}
}
}
輸出結果:
go run main.go
ParkingSpaceStatus:1 ParkingSpaceno:B34
ParkingSpaceStatus:-1 ParkingSpaceno:13Q-6