从GoLang中的单独[]字节结果创建JSON数组

时间:2015-10-29 14:56:40

标签: arrays json go tiedot

我有一个来自tiedot查询的结果循环。

在它最基本的形式中它看起来像这样:

col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
    return true
    return false
})

我可以将这些结果从管道发送到客户端,但一次只能发送1个。不是我想要的。

我也可以使用json.Unmarshal创建单个JSON对象但是如何将它们全部组合成一个大的JSON数组呢?

非常感谢。 GO的新手!

1 个答案:

答案 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)