Текстовые форматы передачи данных XML и JSON

XML

XML (eXtensible Markup Language) - язык разметки документов, использующийся для хранения, передачи и описания данных в структурированном виде. Он был создан для обеспечения универсального и единообразного способа обмена данными между различными системами и приложениями.

Правильное построение XML документа предполагает соблюдение некоторых правил и рекомендаций. Вот некоторые из них:

  • Использование правильной кодировки: Кодировка XML документа должна быть указана в самом начале документа, с помощью инструкции <?xml version="1.0" encoding="UTF-8"?>. Кодировка может быть различной, но наиболее распространенной и рекомендуемой является UTF-8.

  • Определение корневого элемента: XML документ должен начинаться с корневого элемента, который может содержать другие элементы и атрибуты. Название корневого элемента должно быть уникальным и описательным, то есть отражать содержание документа.

  • Использование правильных имен элементов и атрибутов: Имена элементов и атрибутов должны быть описательными, понятными и легко читаемыми. Имена элементов и атрибутов не могут начинаться со знака цифры и не могут содержать пробелы.

  • Использование правильной структуры: XML документ должен иметь правильную иерархическую структуру, где каждый элемент должен иметь свой родительский элемент. При написании документа следует учитывать, что структура XML документа должна отражать логическую структуру данных, которые он описывает.

  • Использование правильных типов данных: Значения элементов должны быть указаны в правильных типах данных. Например, числа должны быть указаны в качестве числовых значений, а даты - в качестве даты.

Использование комментариев: В XML документе можно использовать комментарии, которые помогут описать структуру и содержание документа. Они начинаются с символов <!--и заканчиваются символами -->.

Основные функции XML:

  • Описание структуры документа: XML позволяет определить, какие элементы и атрибуты могут быть использованы в документе, а также как эти элементы должны быть упорядочены и иерархически организованы.

  • Обмен данных: XML позволяет обмениваться данными между различными системами и приложениями с различными платформами, основанными на разных языках программирования.

  • Хранение данных: XML можно использовать для хранения данных в файловой системе или базе данных. Это позволяет сохранять данные в универсальном формате, который может быть использован любым приложением, способным обработать XML.

  • Преобразование данных: XML позволяет конвертировать данные из одного формата в другой. Например, можно преобразовать данные из формата XML в формат HTML для отображения на веб-страницах.

Пример XML файла:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
  <person>
    <name>Иван</name>
    <age>25</age>
    <city>Москва</city>
  </person>
  <person>
    <name>Мария</name>
    <age>30</age>
    <city>Санкт-Петербург</city>
  </person>
</persons>

В данном примере файл содержит информацию о людях, где каждая персона описана в тегах <person> и включает три элемента: <name> (имя), <age> (возраст) и <city> (город). Также используется инструкция обработки <?xml version="1.0" encoding="UTF-8"?>, которая указывает на версию и стандарт кодирования XML файла.

Преимущества XML:

  • Универсальность: XML может использоваться для описания данных из любой области. Он не зависит от конкретного приложения или системы, и может быть использован в различных областях и с различными технологиями.

  • Расширяемость: XML предоставляет возможность создания собственных тегов и атрибутов, что позволяет расширять его возможности и создавать собственные структуры данных.

  • Удобство для человека: XML использует простой и понятный для человека синтаксис, что упрощает создание и понимание структуры документов.

JSON

JSON (JavaScript Object Notation) - простой формат обмена данными, основанный на синтаксисе объектов JavaScript. Он используется для передачи структурированных данных между клиентом и сервером, а также между различными приложениями.

Правильное построение JSON файла предполагает следование некоторым правилам и рекомендациям, которые помогут создавать правильные и читабельные JSON документы. Вот некоторые из них:

  • Правильный синтаксис: JSON использует синтаксис объектов JavaScript. Объекты могут содержать поля и значения, заключенные в фигурные скобки: {}. Массивы состоят из элементов, разделенных запятыми, и заключенных в квадратные скобки: []. Каждый элемент массива и каждое поле объекта также заключается в кавычки, например: "name":"John". JSON обязательно должен начинаться и заканчиваться фигурными скобками.

  • Определение корневого объекта: JSON документ должен начинаться с корневого объекта, который может содержать другие объекты и массивы. Название корневого объекта должно быть описательным и отражать содержание документа.

  • Использование правильных имен полей и значений: Имена полей и значений должны быть описательными, понятными и легко читаемыми. Имена полей не могут начинаться с цифр и не могут содержать пробелы. Значения должны быть указаны в правильных типах данных - строки в кавычках, числа без кавычек, логические значения возвращают true или false.

  • Использование пробелов и отступов: Для повышения читабельности JSON документа можно использовать пробелы и отступы. Однако, это необязательно и не должно влиять на функциональность документа.

  • Использование комментариев: В отличие от XML, JSON не поддерживает комментарии в документах - все что нужно передавать между клиентом и сервером должно быть заключено в структуру данных.

Основные функции JSON:

  • Обмен данными: JSON позволяет передавать данные между сервером и клиентом без потери информации.

  • Хранение данных: JSON может использоваться для хранения данных в базе данных или файловой системе. Он позволяет хранить данные в удобном для чтения и обработки формате.

  • Преобразование данных: JSON позволяет конвертировать данные из одного формата в другой. Например, можно преобразовать данные из формата JSON в формат XML для совместимости с другими системами.

Точно такой пример как и выше, только в формате JSON:

{
  "persons": [
    {
      "name": "Иван",
      "age": 25,
      "city": "Москва"
    },
    {
      "name": "Мария",
      "age": 25,
      "city": "Москва"
    }
  ]
}

Использование в Ruby

К сожалению или к счастью, XML считается устаревшим форматом передачи данных и сейчас его можно встретить только в качестве файла конфигурации в старых системах. Поэтому в данном разделе я покажу как можно в Ruby работать с JSON.

Для начала подключим JSON парсер с поомщью добавления require "json" в начале файла. Теперь попробуем прочитать JSON:

require "json"

json_str = '
  {
  "persons": [
    {
      "name": "Иван",
      "age": 25,
      "city": "Москва"
    },
    {
      "name": "Мария",
      "age": 25,
      "city": "Москва"
    }
  ]
}
'

json = JSON.parse(json_str)
p json

Далее работа с json объектом практически ничем не отличается от хэш таблицы, поэтому можете представлять json как хэш таблицу с другими вложенными хэш таблицами

require "json"

json_str = '
  {
  "persons": [
    {
      "name": "Иван",
      "age": 25,
      "city": "Москва"
    },
    {
      "name": "Мария",
      "age": 25,
      "city": "Москва"
    }
  ]
}
'

json = JSON.parse(json_str)
persons = json["persons"] # получаем вложенный JSON массив по ключу 'persons'
p persons # = [{"name"=>"Иван", "age"=>25, "city"=>"Москва"}, {"name"=>"Мария", "age"=>25, "city"=>"Москва"}]
persons.each do |person|
  puts "name: #{person['name']}, age: #{person['age']}, city: #{person['city']}"
end

Также мы можем превращать любые наши объекты в JSON при наличии require "json" и реализованного метода def to_json(*args), который вернет JSON представление объекта

require "json"

class Person
  attr_accessor :name, :age, :city

  def initialize(name, age, city)
    @name = name
    @age = age
    @city = city
  end

  # самый простой способ записи это написать в формате хэша и перевести в json
  def to_json(*args)
    {
      'name': @name, 
      'age': @age, 
      'city': @city  
    }.to_json(args)
  end
end
require "json"

persons = [
  Person.new('Антон', 25, 'Москва'),
  Person.new('Мария', 25, 'Москва'),
]

persons_json = persons.to_json # = [{"name"=>"Иван", "age"=>25, "city"=>"Москва"}, {"name"=>"Мария", "age"=>25, "city"=>"Москва"}]

Бонус

Бонусная функция для создания JSON из любого объекта:

def to_json(*args)
  instance_variables.each_with_object({}) {|var, hash|
    hash[var.to_s.delete("@")] = instance_variable_get(var)
  }.to_json(args)
end

Задание csv_to_json

Напишите функцию convert_csv_to_json(path_to_csv), которая принимает путь до CSV файла из предыдущего урока, превращает его в массив JSON объектов аналогичный по структуре сущности из CSV и записывает данные в файл, находящийся по тому же пути, с таким же названием, но с расширение файла .json.

Last updated