如何读取多个json文件

我正在尝试从多个 json 文件读取 json 数据。我不确定如何读取每个文件并连接所有结果


json 文件名是 test1.json、test2.json test3.json..etc 具有相同的数据结构,但我在读取所有内容时遇到问题,并且我的代码似乎只显示最后一个。我已经根据文件名连接了一个字符串,但似乎不适合我。


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 

    }

}

我需要能够读取所有三个 json 文件并希望连接所有结果。谁能帮我?谢谢你!


喵喔喔
浏览 125回答 1
1回答

蝴蝶不菲

您在生成文件名时使用fileIndex,而不是i在 for 循环中使用。更改后的代码将是:type Book struct {&nbsp; &nbsp; Id&nbsp; &nbsp; string `json: "id"`&nbsp; &nbsp; Title string `json: "title"`}func main() {&nbsp; &nbsp; fileIndex := 2 // three json files. All named test1.json, test2.json and test3.json&nbsp; &nbsp; var master []Book&nbsp; &nbsp; for i := 0; i <= fileIndex; i++ {&nbsp; &nbsp; &nbsp; &nbsp; fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")&nbsp; &nbsp; &nbsp; &nbsp; // Open jsonFile&nbsp; &nbsp; &nbsp; &nbsp; jsonFile, err := os.Open(fileName)&nbsp; &nbsp; &nbsp; &nbsp; defer jsonFile.Close()&nbsp; &nbsp; &nbsp; &nbsp; byteValue, _ := ioutil.ReadAll(jsonFile)&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(byteValue)&nbsp; &nbsp; &nbsp; &nbsp; var book []Book&nbsp; &nbsp; &nbsp; &nbsp; json.Unmarshal(byteValue, &book)&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(book)&nbsp; &nbsp; }}另外,您可以在 for 循环中执行类似的操作master = append(master, book),以最终获取所有 JSON 内容master
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go