为了账号安全,请及时绑定邮箱和手机立即绑定

使用 iotil.ReadAll() 从多个 json 文件写入 []string

使用 iotil.ReadAll() 从多个 json 文件写入 []string

Go
慕标5832272 2022-06-13 15:10:20
在从目录中读取 json 文件时,我遇到了从 json 文件中获取信息的问题。我不明白,为什么当我编写代码时它根本不起作用。func FilePathWalkDir(root string) ([]string, error) {    var files []string    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {        if !info.IsDir() {            files = append(files, path)        }        return nil    })    return files, err}var s []stringfunc main() {var (        files []string        err   error    )files, err = FilePathWalkDir("D:/Go/Go_project/Go_pro/files")if err != nil {    panic(err)}for _, file := range files {    //fmt.Println("Index for json:", index)    jsonFile, err := os.Open(file)    if err != nil {        log.Println("Error:", err)    }    defer jsonFile.Close()    byteValue, _ := ioutil.ReadAll(jsonFile)    _ = json.Unmarshal([]byte(byteValue), &s)    log.Printf("Unmarshaled: %v", s)}}在此之后,我得到:2020/06/21 13:10:03 Unmarshaled: []2020/06/21 13:10:03 Unmarshaled: []2020/06/21 13:10:03 Unmarshaled: []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"}
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

您正在尝试解组切片类型 [] 字符串,而文件内的数据是映射类型 map [字符串] 字符串。


切片类型为:["1", "2", "3"],映射类型为:{"name": "Andrew", "age": 33"}。


请阅读有关slices和maps的信息。


func FilePathWalkDir(root string) ([]string, error) {

    var files []string

    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {

        if !info.IsDir() {

            files = append(files, path)

        }

        return nil

    })

    return files, err

}


// var s []string !

var s map[string]string


func main() {

    files, err := FilePathWalkDir("D:/Go/Go_project/Go_pro/files")

    if err != nil {

        panic(err)

    }


    for _, file := range files {

        jsonFile, err := os.Open(file)

        if err != nil {

            // ???

            log.Println("Error:", err)

        }


        defer jsonFile.Close()


        byteValue, _ := ioutil.ReadAll(jsonFile)


        if err := json.Unmarshal([]byte(byteValue), &s); err != nil {

            // always check errors

            panic(err)

        }

        

        log.Printf("Unmarshaled: %v", s)


    }

}


查看完整回答
反对 回复 2022-06-13
?
富国沪深

TA贡献1790条经验 获得超9个赞

如果要将map[string]字符串转换为[]字符串,可以使用下面的方法


var strs []string

strs = append(s[key],strs)

...

但是这种方法会让你失去地图的钥匙。为什么使用 []string 而不是 map。


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信