我如何创建和数组 maps[string]interface 来添加多个 json 文件(不是所有的 json 文件,而是不同的文件)。我创建了一个代码,它将所有 json 文件添加到一个中。但将来我需要比较 map[string]interface 中的字段。我认为需要创建一个循环。这是我的程序代码:
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]接口(interface)。无需创建结构。
最佳答案
对于数组,我认为您正在寻找 []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)
}
}
关于json - 多个 map[string] 接口(interface)并将它们映射到多个 json 文件 GOLANG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62482884/