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

}

^ 这行得通但是有没有更好的方法来做到这一点它看起来很冗长,我在这个数组中只有 3 个结构但我可以有更多吗?

为什么它[{1 NONE}]无论如何都会返回而不是 Key:Value 支柱?


红糖糍粑
浏览 117回答 1
1回答

隔江千里

我假设 apiResponseData 是 []CHData您应该检查响应是否为无(1 个条目、1 个名为 None 的命中等)如果是,则使用默认响应。type apiResponseData []CHDatavar defaultAPIResponseData = apiResponseData{&nbsp; &nbsp; {0, "HIT"},&nbsp; &nbsp; {0, "MISS"},&nbsp; &nbsp; {0, "EXPIRED"},}func (r apiResponseData) IsNone() bool {&nbsp; &nbsp; return len(r) == 1 && r[0].Name == "None"}
打开App,查看更多内容
随时随地看视频慕课网APP