如何使用golang在json响应中创建自定义键

时间:2016-03-31 06:46:26

标签: json go

我通过golang获得了以下json响应。

 [
    {
        "CreatedOn": "03-22-2015",
        "JSONReceived": [
            {
                "EzpOrderID": "ezp_126",
                "FirstName": "Kumar",
                "LastName": "S",
                "OrderDesc": "Sample"
            }
        ],
        "Status": "0",
        "id": "80acbdad-8aae-4d6c-ac63-2a02a9db64b4"
    },
    {
        "CreatedOn": "03-22-2015",
        "JSONReceived": [
            {
                "EzpOrderID": "ezp_126",
                "FirstName": "Vasanth",
                "LastName": "K",
                "OrderDesc": "Sample"
            }
        ],
        "Status": "0",
        "id": "8f7f52a5-793a-45bd-a9b7-ed41495e0ee3"
    }
]..

但我需要用响应来创建密钥。样本回应如下。如何使用golang编程实现。

 {
    "returnResponseData": [{
        "CreatedOn": "03-22-2015",
        "JSONReceived": [{
            "EzpOrderID": "ezp_126",
            "FirstName": "Kumar",
            "LastName": "S",
            "OrderDesc": "Sample"
        }],
        "Status": "0",
        "id": "80acbdad-8aae-4d6c-ac63-2a02a9db64b4"
    }, {
        "CreatedOn": "03-22-2015",
        "JSONReceived": [{
            "EzpOrderID": "ezp_126",
            "FirstName": "Vasanth",
            "LastName": "K",
            "OrderDesc": "Sample"
        }],
        "Status": "0",
        "id": "8f7f52a5-793a-45bd-a9b7-ed41495e0ee3"
    }]
}

请使用golang帮助我完成此任务。

整个源代码如下:

 func orderList(w http.ResponseWriter, request *http.Request) {

    rows, err := r.Table("orders").Run(session)
    if err != nil {
        fmt.Println(err)
        return
    }

    var resultSet []interface{}

    err = rows.All(&resultSet)
    if err != nil {
        fmt.Printf("Error scanning database result: %s", err)
        return
    }

    if origin := request.Header.Get("Origin"); origin != "" {
        w.Header().Set("Access-Control-Allow-Origin", origin)
        w.Header().Set("Access-Control-Allow-Methods", "GET")
        w.Header().Set("Access-Control-Allow-Headers",
        "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
    }


    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(200)            
    json.NewEncoder(w).Encode(resultSet)



}

1 个答案:

答案 0 :(得分:3)

您必须定义另一种类型:

type Wrapper struct {
    ReturnResponseData []interface{} `json:"returnResponseData"`
}

然后编码包装器,包含您的响应集:

json.NewEncoder(w).Encode(&Wrapper{ReturnResponseData: resultSet})

请注意,您必须使用属性标记来实现名称“returnResponseData”,从小写字母开始(因为编码器默认情况下不对私有属性进行编码)。