簡體   English   中英

在 Go 中包裝 API Json 響應

[英]Wrap API Json response in Go

如果這是一個愚蠢的問題,我很抱歉,因為我是 Go 的新手。 我在業務邏輯的基礎上調用了幾個 api,不同類型的響應來像 json 數組,嵌套 json 和單個 json ZA8CFDE6331B49EB2AC666DE6331B49EB2AC66.F68896 我需要包裝一個 api 響應,該響應根據業務邏輯以通用格式調用,例如:

{
"data":"api response here",
"statusCode":200
}

我嘗試了一些,但沒想到 output

type Model[T any] struct {
    Data       T
    StatusCode int
}

model := Model[string]{Data: apiResponse, StatusCode: 200}
out, err := json.Marshal(model)

這段代碼的輸出是

{
    "Data": "[{\"name\":\"Harry Potter\",\"city\":\"London\"},{\"name\":\"Don Quixote\",\"city\":\"Madrid\"},{\"name\":\"Joan of Arc\",\"city\":\"Paris\"},{\"name\":\"Rosa Park\",\"city\":\"Alabama\"}]",
    "StatusCode": 200
}

issue is actual api response is still in string.i need api response in proper json and also need to make it generic so that any kind of json response map into it.

你可以簡單地做:

result:=map[string]interface{} {
   "data": apiResponse,
   "statusCode": 200,
}
out, err:=json.Marshal(result)

使用字段Data類型作為interface{}

type APIResponse struct {
    Data       interface{} `json:"data"`
    StatusCode int         `json:"statusCode"`
}

然后您可以將任何 API 響應類型分配給Data字段並對其進行編組。

func main() {
    r := []Person{
        {
            Name: "Harry Porter",
            City: "London",
        },
        {
            Name: "Don Quixote",
            City: "Madrid",
        },
    }

    res := APIResponse{
        Data:       r,
        StatusCode: 200,
    }

    resByt, err := json.Marshal(res)
    if err != nil {
        panic(err)
    }

    fmt.Println(string(resByt))
}

Output

{"data":[{"name":"Harry Porter","city":"London"},{"name":"Don Quixote","city":"Madrid"}],"statusCode":200}

Playground中運行完整代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM