2017-07-07 80 views
1

我从S3读取一些JSON文件,并希望将它们全部作为一个大的JSON数组返回。我有一个匹配我的JSON数据的结构,以及一个for循环迭代我的s3存储桶中的所有对象。每次我读,我解组到我的结构数组。我想追加到我的结构数组中,这样我就可以获取所有JSON数据而不仅仅是一个文件的数据。无论如何要在Golang中做到这一点?解组并追加到数组去

+0

你尝试[追加](https://golang.org/pkg/builtin/#append)? – mkopriva

+0

我需要做一个临时切片来追加吗? B/c'Unmarshal'不返回任何内容,所以不能追加。 –

+0

将文件解组到您的struct值中,然后将该结构附加到切片,循环完成后返回切片。 – mkopriva

回答

1

是的,您应该创建一个临时数组来解组每个JSON的内容,然后将这些项追加到最终结果数组中,以便将整个集合作为一个项目返回。

看到这里的一个例子。

在你的情况下,input将来自你提到的每个S3文件。此外,你可能会把这个反编组逻辑放在它自己的函数中,以便能够为每个输入JSON调用它。

package main 

import (
    "encoding/json" 
    "fmt" 
    "log" 
) 

type Record struct { 
    Author string `json:"author"` 
    Title string `json:"title"` 
} 

func main() { 
    var allRecords []Record 

    input := []byte(`[{ 
     "author": "Nirvana", 
     "title": "Smells like teen spirit" 
    }, { 
     "author": "The Beatles", 
     "title": "Help" 
    }]`) 

    var tmpRecords []Record 
    err := json.Unmarshal(input, &tmpRecords) 
    if (err != nil) { 
     log.Fatal(err) 
    } 

    allRecords = append(allRecords, tmpRecords...) 

    fmt.Println("RECORDS:", allRecords) 
} 

https://play.golang.org/p/ZZGhy4UNhP

+0

请注意循环'tmpRecords'是没有意义的,因为这个'slice = append(slice,anotherSlice ...)'也是一样的。 – mkopriva

+0

@mkopriva:是的,没错。编辑代码。 – eugenioy