Как преобразовать JSON в CSV на примере Golang

Golang csv.NewWriter () — это встроенная функция, преобразующая структуру данных в формат csv . CSV (значения, разделенные запятыми) — это широко распространенный язык данных, обычно используемый в Excel и электронных таблицах, и поэтому очень полезен, если ваш сценарий создает данные, и вы хотите, чтобы они были в стандартном формате.

Golang: как преобразовать JSON в CSV

В пакете CSV есть функция NewWriter () , которая возвращает объект Writer который используется для записи данных CSV. Csv.Writer () записывает записи csv, которые заканчиваются новой строкой, и использует запятую в качестве разделителя полей.

Поочередно просмотрите следующие фрагменты кода.

Давайте создадим файл json. Мы назовем его

 [{"Приложение":  "Instagram", "Компания": "Facebook", "Категория": "Социальные сети"}, {"Приложение": "WeChat", "Компания": "Tencent", "Категория": "Социальные сети"}, {  "Приложение": "Hotstar", "Компания": "Дисней", "Категория": "Развлечения"}, {"Приложение": "CNBC", "Компания": "Comcast", "Категория": "Новости"}  , {"Приложение": "SnapChat", "Компания": "Snap", "Категория": "Социальные сети"}] 

Итак, наш объект JSON имеет три свойства.

  1. App
  2. Company
  3. Category

Теперь давайте напишем hello.go file.

Сначала нам нужно импортировать следующие пакеты go .

 пакет mainimport ("encoding/csv" "encoding/json" "fmt" "io/ioutil" "os") 

Пакет csv читает и записывает файлы со значениями, разделенными запятыми (CSV).

Существует много типов файлов CSV, и этот пакет поддерживает формат, описанный в RFC 4180.

Пакет json

реализует кодирование и декодирование JSON, как определено в RFC 7159. Сопоставление между значениями JSON и Go описано в документации для функций Marshal и Unmarshal.

Package fmt реализует форматированный ввод-вывод с функциями, аналогичными printf и scanf в языке C. Формат « глаголы » является производным от C, но является более простым.

Пакет io/ioutil реализует некоторые операции ввода-вывода. служебные функции.

Package os предоставляет платформенно-независимый интерфейс для функциональных возможностей операционной системы. Дизайн подобен Unix, хотя обработка ошибок подобна Go; невыполненные вызовы возвращают значения типа error, а не номера ошибок.

Теперь следующим шагом является определение структуры.

//Тип структуры приложения Структура приложения {App stringCompany stringCategory string} 

Структуры Golang — это определяемый пользователем тип, который содержит коллекцию именованных полей/свойств. Он используется для группировки связанных данных в единое целое.

Теперь определите функцию main ().

первым шагом является чтение файла с помощью функции ioutil.ReadFile () .

 jsonDataFromFile, err: = ioutil.ReadFile ("./company.json"), если  err! = nil {fmt.Println (err)} 

Мы уже определили файл json ioutil.ReadFile () считывает файл, названный по имени файла, и возвращает его содержимое.

Теперь демаршалируйте содержимое json-файла.

 var jsonData [] Applicationerr = json  .Unmarshal ([] byte (jsonDataFromFile), & jsonData) if err! = Nil {fmt.Println (err)} 

Теперь создайте файл CSV в Golang с помощью os. Create () .

 csvFile, err: = os.Create ("./data.csv") if err! = Nil {fmt.Println (err)} defer csvFile  .Close () 

Теперь посмотрим на следующий код.

 writer: = csv.NewWriter (csvFile) for _, usance: = range jsonData {var row [  ] строка = приложение  d (row, usance.App) row = append (row, usance.Company) row = append (row, usance.Category) writer.Write (row)}//не забудьте очистить! writer.Flush () 

В приведенном выше фрагменте кода мы создаем объект записи, а затем добавляем один за другим содержимое json в этот файл csv. Итак, это содержимое json будет преобразовано в файл csv.

Двумерная строка среза содержит образцы записей csv. Функция Go os.Create () создает csv-файл data.csv; обрезать все записи, если они уже существуют, и вернуть экземпляр объекта os.File () .

Функция csvwriter.Write (row) вызывается для записи каждого фрагмента строк в файл в виде записей CSV .

Весь наш окончательный код выглядит следующим образом.

//hello.gopackage mainimport ("encoding/csv" "encoding/json" "fmt" "io/ ioutil "" os ")//Тип структуры приложения Application struct {App stringCompany stringCategory string} func main () {//считываем данные из файлаjsonDataFromFile, err: = ioutil.ReadFile (" ./company.json ") if err! = nil  {fmt.Println (err)}//Отменить маршалинг данных JSON jsonData [] Applicationerr = json.Unmarshal ([] byte (jsonDataFromFile), & jsonData) if err! = nil {fmt.Println (err)} csvFile, err: = osvFile, err: =  .Create ("./data.csv") if err! = Nil {fmt.Println (err)} defer csvFile.Close () writer: = csv.NewWriter (csvFile) for _, usance: = range jsonData {var row  [] stringrow = append (row, usance.App) row = append (row, usance.Company) row = append (row, usance.Category) writer.Write (row)}//не забудьте очистить! writer. Flush ()} 

Вывод

 Instagram, Facebook, Social MediaWeChat, Tencent, Social MediaHotstar, Disney, EntertainmentCNBC, Comcast,  NewsSnapChat, Snap, социальные сети 

Наконец, Golang: пример преобразования JSON в CSV окончен.

Оцените статью
nanomode.ru
Добавить комментарий