我的应用程序的前端期望在命名空间下从服务器返回 json(如下面的 messages
)
{
messages: [{
"id": "6b2360d0" //other properties omitted
},{
"id": "a01dfaa0" //other properties omitted
}]
}
如果没有消息,我需要返回一个带有命名空间的空数组
{
messages: []
}
但是,如果没有从数据库中提取消息,下面的代码当前返回 null
{
messages: null
}
我怎样才能改变下面的代码,这样
{
messages: []
}
如果数据库中没有消息则返回?
type Inbox struct {
Messages []*Message `json:"messages"`
}
type Message struct {
Content string `json:"type"`
Date string `json:"date"`
Id string `json:"id"`
}
func fetchMessages(w http.ResponseWriter, req *http.Request) {
var ib Inbox
var index int = 0
err := db.View(func(tx *bolt.Tx) error {
c := tx.Bucket([]byte("messages")).Cursor()
for k, v := c.Last(); k != nil && index < 10; k, v = c.Prev() {
//note the next few lines might appear odd, currently each json object to be added to the array of messages is also namespaced under 'message', so I first unmarshal it to a map and then unmarshal again into a the struct
var objmap map[string]*json.RawMessage
if err := json.Unmarshal(v, &objmap); err != nil {
return err
}
message := &Message{}
if err := json.Unmarshal(*objmap["message"], &message); err != nil {
return err
}
ib.Messages = append(ib.Messages, message)
}
return nil
})
response, _ := json.Marshal(a)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(response)
}
最佳答案
替换:
var ib Inbox
与:
var ib Inbox
ib.Messages = make([]*Message, 0)
或与:
ib := Inbox{Messages: make([]*Message, 0)}
(可选地使用 make(…, 0, someInitialCapacity)
代替。)
关于go - 如果数据库为空则返回一个空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30549522/