Рубрики
Без рубрики

Что такое: YAML – его обзор, основные типы данных, YAML VS JSON и Pyyaml.

YAML – это один из самых популярных форматов … Ну, на самом деле, они не знают формат того, что … помечено с ямлом, JSON, Python.

YAML – это один из самых популярных форматов …

Ну, на самом деле, они не знают формат того, что …

Первоначально это был « Еще одна разметка языка Markup », Позже это стало« Ямл Не накладывайте язык »:

Первоначально ЯМЛ сказал, что это значит Еще одна разметка языка Markup , [12] ссылается на его цель как Язык разметки с Еще один построить, но тогда было повторено как Ямл Не накладывайте язык , а Рекурсивное аббревиатуру , чтобы отличить свою цель как ориентированную на данные, а не на разметку документов.

В российской Википедии «дружеское» слово даже принимается в цитатах – и я абсолютно согласен с этим.

На самом деле – YAML – это еще один тип серии данных, преемник формата JSON, но с некоторыми дополнительными способностями.

В недавнем опросе в Украинские дежопты сообществаyaml vs json” – Ямл занял около 90% голосов.

Что касается меня, JSON еще самый удобный, но ямл используется во многих местах, поэтому нужно его использовать.

В этом посте будет ближе взглянуть на типы данных YAML и быстрое сравнение с JSON.

Ямл Основные принципы

  • Всегда используйте UTF-8, чтобы избежать возможных проблем
  • Никогда не используйте вкладку для отступа

Валидация синтаксиса YAML

Чтобы проверить синтаксис YAML в Linux yamllint может быть использован.

Установите это:

$ sudo pacman -S yamllint

А также Проверьте файл:

$ yamllint monitoring.yml
monitoring.yml
1:1       warning  missing document start "---"  (document-start)
20:34     error    trailing spaces  (trailing-spaces)
22:32     error    trailing spaces  (trailing-spaces)
23:37     error    trailing spaces  (trailing-spaces)
33:7      error    wrong indentation: expected 8 but found 6  (indentation)
35:9      error    wrong indentation: expected 10 but found 8  (indentation)
36:11     error    wrong indentation: expected 12 but found 10  (indentation)

Хотя этот файл, используемый Anibile без каких-либо проблем – в его форматировании все еще есть некоторые проблемы.

Валидация JSON

А например – Джосовые документы Валидация от консоли Linux с помощью Python’s JSON Модуль:

$ python -m json.tool < json-example.json
{
  "key1": "value1",
}

Vim Plugin

Есть также Vim-Yaml плагин для погибший .

Добавить в свой .vimrc. :

...
" https://vimawesome.com/plugin/vim-yaml-all-too-well
Plug 'avakhov/vim-yaml'
" add yaml stuffs
au! BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml foldmethod=indent
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
...

Перезагрузить конфигурацию и установить его:

:source %
:PlugInstall

Pyyaml.

Работать с YAML из Python есть Pyyaml библиотека.

Некоторые примеры ниже.

Форматирование YAML

Комментарии в Ямл

Одним из немногих преимуществ YAM является возможность добавления комментариев в его файлах.

Форматирование комментариев обычно – используя #.

Комментарий может быть добавлен в любом месте.

Примеры:

---
# I'm comment
- name: somestring
  value1: "# I'm not a comment!"
  value: anotherstring  # another comment

Отступы

Главная головная боль на ямле – это углубления.

В этом, в целом файле, количество пробелов (пробелов – никогда не вкладывается!) Должно быть одинаковым.

Я Если в одном месте используются два пространства – тогда весь файл должен использовать два пробела.

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

Например:

---
parent_key:
    key1: "value1"
    key2: "value2"
    key3: "%value3"

Будет действительная форма, но следующий пример:

---
parent_key1:
    key1: "value1"
    key2: "value2"
    key3: "%value3"
parent_key2:
  key1: "value1"
  key2: "value2"
  key3: "%value3"

Не будет.

В то время как в Python, который носит, вырабатывается из-за зависимости от пространств, которые можно использовать такое форматирование, хотя будет нарушение стандарта:

#!/usr/bin/env python
def a():
    print("A")

def b():
  print("B")

a()
b()

Результаты:

$ python spaces.py
A
B

Однострочный ямл

Помимо стандартного представления и помещения вдавливания – вы можете использовать JSON-подобное форматирование, как:

---
parent_key: {key1: "value1", key2: "value2"}

Буквальный скалярный скаляр

YAML поддерживает возможность добавления многоуровневых буквальных скаляров и имеет три типа: общий, используя « | » и « > ».

Общий формат выглядит как:

---
string: This
    is
    some text
    without newlines

Результат в Python Console:

>>> yaml.load(open('yaml-example.yml'))
{'string': 'This is some text without newlines'}

Используя |. ( буквальный стиль) – Сохранит все новинки и закрывающиеся пространства:

---
string: |
    This
    is
    some text
    with newlines

Результат:

>>> yaml.load(open('yaml-example.yml'))
{'string': 'This\nis\nsome text\nwith newlines\n'}

И используя> ( сложенный стиль ):

---
string: >
    This
    is
    some text
    without newlines

Вернет весь текст в одной строке + закрытие символа новой строки:

>>> yaml.load(open('yaml-example.yml'))
{'string': 'This is some text without newlines\n'}

Но все же вы должны придерживаться того же форматирования пространств.

Кроме того, проверьте отличный ответ на Stackoverflow Здесь >>> :

Есть 5 6 девять (или 63 *, в зависимости от того, как вы рассчитываете) разные способы записи многострочных строк в YAML.

YAML Основные форматы данных

ЯМЛ использует три основных формата данных::

  • скаляры: самый простой в Ключ: значение Посмотреть
  • Список/последовательность: данные, заказанные индексами
  • Словарь/отображение: аналогично скалярам, но может содержать вложенные данные, включая другие типы данных

Скаляры

Базовый тип данных – скаляры, просто ключ: значение в качестве переменных программирования:

---
key1: "value1"
key2: "value2"

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

cat example.yml
---
key1: "value1"
key2: "value2"
key3: %value3

Проверьте:

$ yamllint example.yml
example.yml
4:7       error    syntax error: found character '%' that cannot start any token

Тем не менее, вы можете пропустить цитаты для логических истинных/ложных значений и для целочисленных типов.

Скаляры – ямл против json

Например – скалярный в Ямле:

---
key: "value"

И json:

{
    "key": "value"
}
Питон

ЯМЛ-скаляры в примере Python:

>>> import yaml
>>> yaml.load("""
... key: "value"
... """)
{'key': 'value'}

Или из файла:

>>> import yaml
>>> yaml.load(open('yaml-example.yml'))
{'key': 'value'}

Списки в Ямле

Списки, последовательности, коллекции – представляет собой коллекцию упорядоченных данных, где каждый элемент может быть доступен по его индексу.

Например:

# SIMPLE LIST
- element1
- element2
Вложенные списки в Ямле

Аналогично в приведенные выше – списки могут включать вложенный список:

# SIMPLE LIST
- element1
- element2
# nested list
-
  - element1

Или может быть названный список:

---
itemname:
  - valuename

При этом списки могут также содержать скабать или словари:

---
itemname:
  - valuename
  - scalar: "value"
  - dict: {item1: "value1", item2: "value2"}
Списки – YAML VS JSON

Список в Ямле:

---
- item1
- item2
- item3

Список в JSON:

[
    "item1",
    "item2",
    "item3"
]

Вложенный список в Ямле:

---
- item1
- item2
- item3
-
  - nested1

Вложенный список в JSON:

[
    "item1",
    "item2",
    "item3",
    [
        "nested1"
    ]
]
Python и YAML-списки

Вот все похожие на пример скаляра:

>>> yaml.load(open('yaml-example.yml'))
['item1', 'item2', 'item3', ['nested1']]
>>> for i in yaml.load(open('yaml-example.yml')):
...   print(i)
...
item1
item2
item3
['nested1']

Словари

Словари, также называемые сопоставлениями, похожи на тип скаляров и содержит ключ: данные о значениях, но в отличие от скаляров, которые являются основным типом – словарь могут включать в себя вложенные элементы, например, список:

---
key1: "value1"
key2:
  - value2
  - value3

Или другой вложенный словарь:

---
key1: "value1"
key2:
  - value2
  - value3

key3:
  key4: "value4"
  key5: "value5"
  key6:
    key7: "value7"
Словарь – JSON VS YAML

Словарь в Ямле:

---
key1: "value1"
key2:
  - value2
  - value3

Словарь в JSON:

{
    "key1": "value1",
    "key2": [
        "value2",
        "value3"
    ]
}
Питон
>>> yaml.load(open('yaml-example.yml'))
{'key1': 'value1', 'key2': ['value2', 'value3']}
>>> type(yaml.load(open('yaml-example.yml')))

И все обычные для операций словари Python поддерживаются:

>>> dict = yaml.load(open('yaml-example.yml'))
>>> type(dict)

>>> dict.update({'key3':'value3'})
>>> print(dict)
{'key1': 'value1', 'key2': ['value2', 'value3'], 'key3': 'value3'}

В общем – это все.

Проверьте также эти страницы для более подробной информации:

Похожие посты.

Оригинал: “https://dev.to/setevoy/what-is-yaml–its-overview-basic-data-types-yaml-vs-json-and-pyyaml-4n1p”