Как прочитать файл и преобразовать JSON в Go Struct

217
Как прочитать файл и преобразовать JSON в Go Struct
Как прочитать файл и преобразовать JSON в Go Struct

Сегодня мы рассмотрим, как читать файлы и как преобразовывать файлы JSON в структуру Go!

1 – Как прочитать список файлов в папке

С библиотекой io/ioutil это действительно просто. С помощью следующего кода вы сможете перечислить все файлы в папке и посмотреть, является ли это каталогом или нет.

package main

import (
    "io/ioutil"
    "log"
)

...
    files, err := ioutil.ReadDir("./path/to/a/folder")
    if err != nil {
        log.Fatal(err)
    }

    for _, file := range files {
        fmt.Println(file.Name(), file.IsDir())
    }

...

2 – Как прочитать файл?

С библиотекой io/ioutil все очень просто и состоит всего из нескольких строк кода.

content, err := ioutil.ReadFile("file_name.txt")
if err != nil {
    log.Fatal(err)
}

3 – Как преобразовать файл JSON в структуру Go?

Поскольку мы знаем, как читать файл, мы рассмотрим, как преобразовать его в Go struct. Имея содержимое файла, мы можем преобразовать его в экземпляр struct.

Но сначала, чтобы дать приложению понять, как выполнять преобразование, нам нужно сделать некоторые вещи в объявлении struct, который мы хотим использовать.

Для каждого поля нам нужно добавить параметр json, чтобы сообщить эквивалентное json-имя.

type Creature struct {
    Name                  string            `json:"Name"`
    Tags                  []string          `json:"Tags"`
    HP                    CreatureHP        `json:"HP"`

}

type CreatureHP struct {
    Value int    `json:"Value"`
    Notes string `json:"Notes"`
}

Теперь, когда у нас есть готовая структура Creature, мы можем выполнить преобразование с помощью следующего кода:

// Declaration of the instance of the struct that we want to fill
creature := bestiary.Creature{}

// Fill the instance from the JSON file content
err = json.Unmarshal(content, &creature)

// Check if is there any error while filling the instance
if err != nil {
   panic(err)
}

И все! Теперь вы можете использовать этот инстанс, как и все остальные, которые вы можете создать в вашем приложении Golang!