2015-10-29 33 views
0

我有一個來自tiedot查詢的結果循環。從單獨的[]字節結果創建JSON數組GoLang

在它的最基本的形式,它看起來是這樣的:

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

我可以把這些結果沿管路到客戶端,但只能在一個時間1。不完全是我想要的。

我也可以使用json.Unmarshal創建單個JSON對象,但是如何將它們全部組合成1個大的JSON數組?

非常感謝。 GO是新的!

+0

你的意思JSON數組什麼這是一個有點不清楚。你的意思是你可以索引的數組,每個元素是一個字典,還是你的意思是一個文本JSON表示? –

回答

1

如果您直接將此返回給客戶端,並且您的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)