當(dāng)我卷曲一個(gè) api 時(shí),我得到這樣的響應(yīng):[{"Hits":25,"Name":"HIT"},{"Hits":87,"Name":"MISS"},{"Hits":15,"Name":"EXPIRED"}]當(dāng)響應(yīng)返回 0 值時(shí),即 curl 返回:[{"Hits":0,"Name":"HIT"},{"Hits":0,"Name":"MISS"},{"Hits":0,"Name":"EXPIRED"}]在使用 0 值響應(yīng)解組代碼中的 json 后,我實(shí)際得到的是:[{1 NONE}]我實(shí)際上需要具有 0 值的鍵名,因?yàn)槲艺趯⑵鋵懙揭粋€(gè)文件中,最終由另一個(gè)系統(tǒng)使用。為了解決這個(gè)問題,如果返回給我一個(gè),我創(chuàng)建了一個(gè)默認(rèn)數(shù)組[{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}^ 這行得通但是有沒有更好的方法來做到這一點(diǎn)它看起來很冗長,我在這個(gè)數(shù)組中只有 3 個(gè)結(jié)構(gòu)但我可以有更多嗎?為什么它[{1 NONE}]無論如何都會返回而不是 Key:Value 支柱?
1 回答

隔江千里
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
我假設(shè) apiResponseData 是 []CHData
您應(yīng)該檢查響應(yīng)是否為無(1 個(gè)條目、1 個(gè)名為 None 的命中等)
如果是,則使用默認(rèn)響應(yīng)。
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 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)
0/150
提交
取消