dqnk57224 2018-01-29 10:31
浏览 103
已采纳

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

I am importing "encoding/json" package to print output in json.I was able to get the json format but i want to modify the response structure. Here is the sample code

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)

which outputs the following response

[
{
    "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": ""
    }
}
]

But i want to response into the following format

{
"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": ""
        }
    }
        ]
}

How can I modify the response format ? I am beginner in Go. Thanks for your help.

  • 写回答

2条回答 默认 最新

  • duandou2763 2018-01-29 10:50
    关注

    In order to change structure of your response, you need to provide the structure that you want to achieve with type.

    You can define Response struct type which will consist of data and status fields:

    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)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?