2015-10-29 2 views
0

У меня есть цикл результатов, полученных из запроса tiedot.Создать массив JSON из отдельного [] байт результатов в GoLang

В это самая основная форма выглядит следующим образом:

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

Я могу отправить эти результаты вниз по трубе к клиенту, но только один на один раз. Не совсем то, что я хочу.

Я также могу создать отдельные объекты JSON, используя json.Unmarshal, но как я могу объединить их все в один большой массив 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) 
Смежные вопросы