I am trying to read json data from multiple json files. I am not sure how I read each files and concatenate all results
There json files name are test1.json, test2.json test3.json..etc with the same data structure but I am having an issue read then all and my code seems to only show the last one. I have concatenated a string based on the file name but seems to not working for me.
type Book struct {
Id string `json: "id"`
Title string `json: "title"`
}
func main() {
fileIndex := 2 // three json files. All named test1.json, test2.json and test3.json
var master []Book
for i := 0; i <= fileIndex; i++ {
fileName := fmt.Sprintf("%s%d%s", "test", fileIndex, ".json")
// Open jsonFile
jsonFile, err := os.Open(fileName)
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
fmt.Println(byteValue)
var book []Book
json.Unmarshal(byteValue, &book)
fmt.Println(book) // all print shows the test3.json result
}
}
I need to be able to read all three json files and hoping to concatenate all results. Can anyone help me? Thank you!
You are using fileIndex
while generating the filename instead of using i
in the for loop. The code after the changes would be :
type Book struct {
Id string `json: "id"`
Title string `json: "title"`
}
func main() {
fileIndex := 2 // three json files. All named test1.json, test2.json and test3.json
var master []Book
for i := 0; i <= fileIndex; i++ {
fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")
// Open jsonFile
jsonFile, err := os.Open(fileName)
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
fmt.Println(byteValue)
var book []Book
json.Unmarshal(byteValue, &book)
fmt.Println(book)
}
}
Also, you can do something like master = append(master, book)
inside the for loop to finally get all JSON content in master