Golang - 带有json接口的Struct

时间:2016-05-18 13:04:46

标签: json go struct

我问自己有一个错误,我得到了......我正在制作一个API,它会发送一个看起来像这样的响应:

var StatusBack struct {
    Description string // to describe the error/the result
    StatusId int // the status number (500 Internal error, 200 OK...)
}
// client get 
{
    description: "{surname: \"Xthing\", firstname: \"Mister\"}"
    status_id: 200
}

所以我的想法是将一个json变成一个带Marshal的字符串,然后Marshal第二次将StatusBack结构发送给它。但是,它并没有使我真正想要的是获得包含另一个对象的对象。客户端只获得一个包含字符串的对象。事情是,我不发送用户作为结果,所以就像我在下面显示的那样我认为我需要一个接口

var StatusBack struct {
    Description string // to describe the error
    Result <Interface or object, I don t know> // which is the result
    StatusId int // the status number (500 Internal error, 200 OK...)
}
// client get 
{
    description: "User information",
    result: {
        surname: "Xthing",
        firstname: "Mister"
    },
    status_id: 200
}

就像我之前说的,我不仅发送用户,它可能是很多不同的对象,所以我怎样才能实现它?我的第二个想法是否更好?如果是,我该如何编码呢?​​

谢谢!

1 个答案:

答案 0 :(得分:3)

在golang中,json.Marshal处理嵌套的结构,切片和贴图。

package main

import (
    "encoding/json"
    "fmt"
)

type Animal struct {
    Descr description `json:"description"`
    Age   int         `json:"age"`
}

type description struct {
    Name string `json:"name"`
}

func main() {
    d := description{"Cat"}
    a := Animal{Descr: d, Age: 15}
    data, _ := json.MarshalIndent(a,"", "  ")
    fmt.Println(string(data))
}

此代码打印:

{
  "description": {
    "name": "Cat"
  },
  "age": 15
}

当然,解组工作的方式完全相同。 告诉我,如果我误解了这个问题。

https://play.golang.org/p/t2CeHHoX72