英文:
Create JSON array from seperate []byte results in GoLang
问题
我有一个来自tiedot查询的结果循环。
在最基本的形式下,它看起来像这样:
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
return true
return false
})
我可以将这些结果逐个发送给客户端,但不是我想要的。
我也可以使用json.Unmarshal创建单个JSON对象,但如何将它们合并成一个大的JSON数组呢?
非常感谢。我是GO的新手!
英文:
I have a loop of results coming from a tiedot query.
In it's most basic form it looks like this:
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
return true
return false
})
I can send these results down the pipe to the client, but only 1 at a time. Not quite what I want.
I can also create single JSON objects, using json.Unmarshal but how do I combine them all into 1 large JSON array?
Many thanks. New to GO!
答案1
得分: 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(`,`))
// 在开头插入'['
b = append(b, 0)
copy(b[1:], b[0:])
b[0] = byte('[')
// 追加']'
b = append(b, ']')
你也可以先解组(unmarshal),然后追加到切片(slice),最后再组合(marshal)切片。
s := []interface{}{}
col.ForEachDoc(func(id int, docContent []byte) (willMoveOn bool) {
var j interface{}
if err := json.Unmarshal(docContent, &j); err != nil {
// 处理错误
}
s = append(s, j)
return true
})
b, err := json.Marshal(j)
英文:
If you are returning this directly to the client and your docContent
is JSON you can just manually construct the array syntax. It does not provide any safety if docContent
is not valid 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, ']')
You could also unmarshal, then append to a slice, then marshal the slice
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论