为什么json在代码中编码空数组返回null?

pra*_*432 5 json go

所以我有这样的类型

type TextTagRelationship struct {
  Id int64 `json:"id"`
  TagId int64 `json:"tag_id"`
  TaggedText string `json:"tagged_text"`
  TagName string `json:"tag_name"`
  PageNumber int64 `json:"page_number"`
  Color string `json:"color"`
}

type TextTagRelationships []TextTagRelationship
Run Code Online (Sandbox Code Playgroud)

现在,我有一个处理程序可以做这样的事情

func getTaggedTextForPage(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    pageNumber, err := strconv.ParseInt(vars["pageNumber"], 10, 64)
    check(err)
    defer r.Body.Close()
    rows, err := db.Query("SELECT * from tagged_text WHERE page_number = ?", pageNumber)
    check(err)
    var textTagRelationships []TextTagRelationship
    var textTagRelationship TextTagRelationship
    for rows.Next() {
        //execute sql code here
        textTagRelationships = append(textTagRelationships, textTagRelationship)
    }


    if err := json.NewEncoder(w).Encode(textTagRelationships); err != nil {
        check(err)
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有实际行,这可以正常工作,但是在对空数组进行编码时textTagRelationships,在 chrome 控制台的响应中,我得到一个null. 为什么会这样?看起来textTagRelationships实际上是 a [],所以我希望编码对 a 进行编码,[]而我的响应是[].

pra*_*432 8

看起来这是 Go 中的一个问题。

https://danott.co/posts/json-marshalling-empty-slices-to-empty-arrays-in-go.html

解决此问题的方法是不依赖默认的 init 行为,而是实际执行make.

var textTagRelationships TextTagRelationships = make(TextTagRelationships, 0)