多个map [string]接口,并将它们映射到多个json文件GOLANG

时间:2020-06-20 07:23:25

标签: json go

我如何创建和映射maps [string]接口数组以添加多个json文件(不是所有json都在一个文件中,而是在另一个文件中)。我创建了一个代码,将所有json文件添加到一个。但是将来我需要比较map [string]接口中的字段。我认为需要创建一个循环。这是我的程序代码:

var master map[string]interface{}

func main() {
    fileIndex := 3 // three json files. All named test1.json, test2.json and test3.json
    for i := 1; i <= fileIndex; i++ {
        fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")
        // Open jsonFile
        jsonFile, err := os.Open(fileName)
        if err != nil {
            log.Println("Error:", err)
        }

        defer jsonFile.Close()

        byteValue, _ := ioutil.ReadAll(jsonFile)

        json.Unmarshal(byteValue, &master)

        fmt.Println(master)

    }
}

这是我的3个json: 首先:

 {
     "name":"Kate",
     "date":"2013-04-23T19:24:59.511Z",
     "data":"is nice"
 }

第二:

{
    "name":"Gleison",
    "date":"2012-04-23T19:25:00.511Z",
    "data":"is a good person"
}

第三:

{
    "name":"Rodrigo",
    "date":"2013-04-23T20:24:59.511Z",
    "data":"is kind"
}

有必要将它们分为不同的map [string]接口。无需创建结构。

1 个答案:

答案 0 :(得分:0)

对于数组,我认为您正在寻找[] map [string] interface {}。如果我正确理解了您的问题,则只需创建此变量并将其附加

这是修改后的示例

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "os"
)

func main() {

    var master map[string]interface{}
    var allMaster []map[string]interface{}

    fileIndex := 3 // three json files. All named test1.json, test2.json and test3.json
    for i := 1; i <= fileIndex; i++ {
        fileName := fmt.Sprintf("%s%d%s", "test", i, ".json")
        // Open jsonFile
        jsonFile, err := os.Open(fileName)
        if err != nil {
            log.Println("Error:", err)
        }

        defer jsonFile.Close()

        byteValue, _ := ioutil.ReadAll(jsonFile)

        err = json.Unmarshal(byteValue, &master)
        if err != nil {
            log.Fatal(err)
        }

        allMaster = append(allMaster, master)
        fmt.Println(allMaster)

    }
}