Golang返回一个默认的结构数组



当我卷曲一个api时,我会得到这样的响应:

[{"Hits":25,"Name":"HIT"},{"Hits":87,"Name":"MISS"},{"Hits":15,"Name":"EXPIRED"}]

当一个响应返回0值时,即curl返回如下:

[{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]

在用0值响应对代码中的json进行解组后,我实际得到的是:

[{1 NONE}]

实际上,我需要具有0值的密钥名称,因为我要将其写入一个文件,最终由另一个系统使用。

为了解决这个问题,如果返回给我一个[{1 NONE}],我创建了一个默认数组

例如:

type CHData struct {
Hits int    `json:"Hits"`
Name string `json:"Name"`
}
func apiResponse () apiResponseData,err{
//code that calls the api and returns the response {
...
json.Unmarshal([]byte(body), &apiResponseData)  
..
} 

if len(apiReturneddata) <= 1 { // checks for [{1 NONE}] value

//Default array if api returns with 0 values
array1 := CHData{Hits: 0, Name: "HIT"}
array2 := CHData{Hits: 0, Name: "MISS"}
array3 := CHData{Hits: 0, Name: "EXPIRED"}
//adding each json into the array of json's
var mockData []CHData
mockData = append(mockData, array1)
mockData = append(mockData, array2)
mockData = append(mockData, array3)
log.Println(mockData)
i, _ := json.Marshal(mockData)
//log.Println(string(i))
//Overwrite the "[{1 NONE}]" with [{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}] 
json.Unmarshal([]byte(i), &apiResponseData)
}
return apiResponseData
}
  1. ^这很有效,但有更好的方法吗?它看起来很冗长,我在这个数组中只有3个结构,但我可以有更多
  2. 为什么它返回[{1 NONE}]而不返回Key:Value支柱

我假设apiResponseData是[]CHData

您应该检查响应是否为无(1个条目,1个名为无的命中等(

如果是,则使用默认响应。


type apiResponseData []CHData
var defaultAPIResponseData = apiResponseData{
{0, "HIT"},
{0, "MISS"},
{0, "EXPIRED"},
}
func (r apiResponseData) IsNone() bool {
return len(r) == 1 && r[0].Name == "None"
}

最新更新