Существует различные популярные форматы данных, используемых для разных целей, таких как передача данных между микросервисами, хранение файлов конфигурации, хранение и передача метаданных и т. д. В этой статье я покажу, как с помощью Go (Golang) парсить из файлов JSON, TOML, YAML, XML и CSV.
Еще по теме: Как установить пакеты Python без интернета
Парсинг JSON, TOML, YAML, XML и CSV помощью Go
Требования:
- Требуется Go v1.11 или выше.
- Умение использовать модули Go (Облегчает работу с Go).
Парсинг JSON
Для парсинга данных файла в формате JSON можно использовать пакет стандартной библиотеки Go encoding/json.
Вот пример парсинга файла в формате JSON с помощью Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
package main import ( "encoding/json" "fmt" ) type UserData struct { Profile struct { FirstName string `json:"first_name"` LastName string `json:"last_name"` Age int `json:"age"` Sex string `json:"sex"` Hobbies []string `json:"hobbies"` } `json:"profile"` } var data string = ` { "profile": { "first_name": "John", "last_name": "Doe", "age": 45, "sex": "male", "hobbies": [ "reading", "programming", "watching movies" ] } } ` func main() { var user UserData err := json.Unmarshal([]byte(data), &user) if err != nil { fmt.Println(err.Error()) } fmt.Printf("%+v\n", user) } |
Парсинг TOML
Для парсинга данных в формате TOML мы будем использовать пакет toml Go. С помощью модулей Go можно установить пакет:
1 |
go get -u -v github.com/BurntSushi/toml@latest |
Вот пример парсинга файла в формате TOML с помощью Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
package main import ( "fmt" "github.com/BurntSushi/toml" ) type Profile struct { Data Data `toml:"profile"` } type Data struct { FirstName string `toml:"first_name"` LastName string `toml:"last_name"` Age int `toml:"age"` Sex string `toml:"sex"` Hobbies []string `toml:"hobbies"` } var data string = ` [profile] first_name = "John" last_name = "Doe" age = 27 sex = "M" hobbies = ["reading", "programming", "movie-watching"] ` func main() { var profile Profile if _, err := toml.Decode(data, &profile); err != nil { panic(err) } fmt.Printf("%+v\n", profile) } |
Парсинг YAML
Для анализа данных в формате YAML мы можем использовать пакет go-yaml. Мы можем получить пакет, используя go get:
1 |
go get -u -v gopkg.in/yaml.v3 |
Вот пример парсинга файла в формате YAML с помощью Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "fmt" "gopkg.in/yaml.v3" ) type Profile struct { Data struct { FirstName string `yaml:"first_name"` LastName string `yaml:"last_name"` Age int `yaml:"age"` Sex string `yaml:"sex"` Hobbies []string `yaml:"hobbies"` } `yaml:"profile"` } var data string = ` profile: first_name: John last_name: Doe age: 45 sex: male hobbies: - reading - programming - watching movies ` func main() { var profile Profile if err := yaml.Unmarshal([]byte(data), &profile); err != nil { panic(err) } fmt.Printf("%+v\n", profile) } |
Разбор XML
Для парсинга данных в формате XML можно использовать пакет стандартной библиотеки Go encoding/xml.
Вот пример парсинга файла в формате XML с помощью Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package main import ( "encoding/xml" "fmt" ) type Profile struct { XMLName xml.Name `xml:"profile"` FirstName string `xml:"firstName"` LastName string `xml:"lastName"` Age int `xml:"age"` Sex string `xml:"sex"` Hobbies struct { XMLName xml.Name `xml:"hobbies"` Hobby []string `xml:"hobby"` } `xml:"hobbies"` } var data string = ` <profile> <firstName>John</firstName> <lastName>Doe</lastName> <age>30</age> <sex>M</sex> <hobbies> <hobby>reading</hobby> <hobby>reading</hobby> <hobby>reading</hobby> </hobbies> </profile> ` func main() { var profile Profile if err := xml.Unmarshal([]byte(data), &profile); err != nil { panic(err) } fmt.Printf("%+v\n", profile) } |
Парсинг CSV
Для парсинга данных в формате CSV можно использовать пакет стандартной библиотеки Go encoding/csv.
Вот пример парсинга файла в формате CSV с помощью Go:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package main import ( "encoding/csv" "fmt" "io" "strings" ) var data string = `ProfileID,FirstName,LastName,Age,Sex,Hobbies 1,John,Doe,25,M,reading programming movies-watching 2,Louise,Belcher,15,F,video-games travelling 3,Jack,Reacher,34,M,shooting-range reading hiking ` func main() { r := csv.NewReader(strings.NewReader(data)) //ignore first line _, err := r.Read() if err != nil { fmt.Println(err.Error()) } for { row, err := r.Read() if err == io.EOF { break } if err != nil { fmt.Println(err.Error()) break } for col := range row { fmt.Printf("%s\n", row[col]) } } } |
На этом все. Мы рассмотрели парсинг 5 популярных форматов данных с помощью языка програмирования Go.
РЕКОМЕНДУЕМ: