Записать в строку [] из нескольких json файлов с помощью iotil.ReadAll () - PullRequest
0 голосов
/ 21 июня 2020

У меня проблема с получением информации из 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"
}

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Если вы хотите преобразовать строку map [string] в строку [], вы можете использовать следующий метод

var strs []string
strs = append(s[key],strs)
...

Но этот метод приведет к потере ключа карты. Почему вы используете строку [] вместо map.

1 голос
/ 21 июня 2020

Вы пытаетесь демаршалировать строку типа среза [], в то время как данные внутри файла представляют собой строку типа карты map [строка].

Тип среза: ["1", "2", "3"] , а тип карты: {"name": "Andrew", "age": 33 "} .

Пожалуйста, прочтите про срезов и карты .

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)

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...