2016-05-18 125 views
0

我問自己,關於我得到一個錯誤..我做這送這似乎是它的響應的API:到Golang - 結構與接口JSON

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結構來發送它。然而,它並沒有讓我真正想要的是獲得一個包含另一個對象的對象。客戶端只得到其中含有string..The的是一個對象,我也不只發送用戶的結果,所以像我在下面,我想我需要一個接口

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 
} 

就像我之前說的,我不僅可以發送用戶,它可以是很多不同的對象,那麼我該如何實現呢?我的第二個想法是否更好?如果是,我該如何編碼?

謝謝!

回答

2

在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

+0

嗯,我不會說你missunderstood,也許我沒有告訴我的權利的問題;)這是一個API,讓我的結構是客戶端確定的答案嗎?這個結構包含另一個結構,它可以是任何結構類型(用戶,動物,銀行帳戶等),所以你的答案對於50%的問題是有好處的;)現在,如果我們拿你的例子,我怎麼能描述作爲一個隨機類型?或接口類型?能夠把有關動物的名字或類型或大小等等放在一起? – Emixam23

+1

是的,你可以,我改變了Descr的類型,它工作得很好(見上文)。這樣你就可以將任何東西放入字段Descr中。 –

+0

完美;)謝謝! – Emixam23