当我卷曲一个 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}^ 这行得通但是有没有更好的方法来做到这一点它看起来很冗长,我在这个数组中只有 3 个结构但我可以有更多吗?为什么它[{1 NONE}]无论如何都会返回而不是 Key:Value 支柱?
1 回答
隔江千里
TA贡献1906条经验 获得超10个赞
我假设 apiResponseData 是 []CHData
您应该检查响应是否为无(1 个条目、1 个名为 None 的命中等)
如果是,则使用默认响应。
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"
}
- 1 回答
- 0 关注
- 144 浏览
添加回答
举报
0/150
提交
取消