如何在 Go 中设置自定义 json 响应结构

Ash*_*fle 3 json go

我正在导入“encoding/json”包以以json格式打印输出。我能够获取 json 格式,但我想修改响应结构。这是示例代码

var people []Person
people = append(people, Person{Id: "1", Firstname: "John", Lastname: "Doe", Address: Address{City: "City X", State: "State X"}})
people = append(people, Person{Id: "2", Firstname: "Koko", Lastname: "Doe", Address: Address{City: "City Z", State: "State Y"}})
people = append(people, Person{Id: "3", Firstname: "Francis", Lastname: "Sunday"})
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(people)
Run Code Online (Sandbox Code Playgroud)

输出以下响应

[
{
    "id": "1",
    "firstname": "John",
    "lastname": "Doe",
    "address": {
        "city": "City X",
        "state": "State X"
    }
},
{
    "id": "2",
    "firstname": "Koko",
    "lastname": "Doe",
    "address": {
        "city": "City Z",
        "state": "State Y"
    }
},
{
    "id": "3",
    "firstname": "Francis",
    "lastname": "Sunday",
    "address": {
        "city": "",
        "state": ""
    }
}
]
Run Code Online (Sandbox Code Playgroud)

但我想回复以下格式

{
"status": "200",
"data": [
    {
        "id": "1",
        "firstname": "John",
        "lastname": "Doe",
        "address": {
            "city": "City X",
            "state": "State X"
        }
    },
    {
        "id": "2",
        "firstname": "Koko",
        "lastname": "Doe",
        "address": {
            "city": "City Z",
            "state": "State Y"
        }
    },
    {
        "id": "3",
        "firstname": "Francis",
        "lastname": "Sunday",
        "address": {
            "city": "",
            "state": ""
        }
    }
        ]
}
Run Code Online (Sandbox Code Playgroud)

如何修改响应格式?我是 Go 初学者。感谢您的帮助。

Neb*_*ril 5

为了更改响应的结构,您需要提供您想要通过类型实现的结构。

您可以定义由和字段Response组成的结构类型:datastatus

type Response struct {
    Status string `json:"status"`
    Data []Person `json:"data"`
}

var people []Person
people = append(people, Person{Id: "1", Firstname: "John", Lastname: "Doe", Address: Address{City: "City X", State: "State X"}})
people = append(people, Person{Id: "2", Firstname: "Koko", Lastname: "Doe", Address: Address{City: "City Z", State: "State Y"}})
people = append(people, Person{Id: "3", Firstname: "Francis", Lastname: "Sunday"})
w.Header().Set("Content-Type", "application/json")

resp := Response{Status: "200", Data: people}
json.NewEncoder(w).Encode(resp)
Run Code Online (Sandbox Code Playgroud)