2017-07-07 78 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