猿问

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

在从目录中读取 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 []string


func 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"

}


慕标5832272
浏览 151回答 2
2回答

慕仙森

您正在尝试解组切片类型 [] 字符串,而文件内的数据是映射类型 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]stringfunc 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)    }}

富国沪深

如果要将map[string]字符串转换为[]字符串,可以使用下面的方法var strs []stringstrs = append(s[key],strs)...但是这种方法会让你失去地图的钥匙。为什么使用 []string 而不是 map。
随时随地看视频慕课网APP

相关分类

Go
我要回答