我有一个来自tiedot查询的结果循环。
在它最基本的形式中它看起来像这样:
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
return true
return false
})
我可以将这些结果从管道发送到客户端,但一次只能发送1个。不是我想要的。
我也可以使用json.Unmarshal创建单个JSON对象但是如何将它们全部组合成一个大的JSON数组呢?
非常感谢。 GO的新手!
答案 0 :(得分:2)
如果要将此直接返回给客户端,并且docContent
是JSON,则可以手动构建数组语法。如果docContent
无效json,则不提供任何安全性。
a := [][]byte{}
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
a = append(a, docContent)
return true
})
b := bytes.Join(a, []byte(`,`))
// insert '[' to the front
b = append(b, 0)
copy(b[1:], b[0:])
b[0] = byte('[')
// append ']'
b = append(b, ']')
您也可以解组,然后附加到切片,然后封送切片
s := []interface{}{}
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
var j interface{}
if err := json.Unmarshal(docContent, &j); err != nil {
// handle error
}
s = append(s, j)
return true
})
b, err := json.Marshal(j)