YAML - стили потока

Стили потока в YAML можно рассматривать как естественное расширение JSON, охватывающее складывающиеся строки содержимого для более удобочитаемой функции, которая использует якоря и псевдонимы для создания экземпляров объектов. В этой главе мы сосредоточимся на потоковом представлении следующих понятий:

  • Узлы псевдонима
  • Пустые узлы
  • Скалярные стили потока
  • Стили коллекции Flow
  • Узлы потока

Пример узлов псевдонима показан ниже -

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   : *A,
   ? !!str "Reuse anchor"
   : *B,
}

Вывод JSON приведенного выше кода приведен ниже -

{
   "First occurrence": "Foo", 
   "Second occurrence": "Foo", 
   "Override anchor": "Bar", 
   "Reuse anchor": "Bar"
}

Узлы с пустым содержимым считаются пустыми узлами. Следующий пример показывает это -

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

Вывод пустых узлов в JSON представлен ниже -

{
   "": "bar", 
   "foo": ""
}

Стили скалярного потока включают двойные кавычки, одиночные кавычки и простые типы. Базовый пример того же приведен ниже -

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]  
}

Вывод в формате JSON для приведенного выше примера показан ниже -

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ] 
}

Коллекция потоков в YAML вложена в коллекцию блоков в другую коллекцию потоков. Записи коллекции потока завершаютсяcomma (,) индикатор. В следующем примере подробно объясняется блок сбора потока -

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],
   
   !!seq [
      !!str "three",
      !!str "four",
   ],
]

Вывод для сбора потока в JSON показан ниже -

[
   [
      "one", 
      "two"
   ], 
   [
      "three", 
      "four"
   ]
]

Стили потока, такие как JSON, включают индикаторы начала и конца. Единственный стиль потока, который не имеет никаких свойств, - это простой скаляр.

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

Вывод для показанного выше кода в формате JSON приведен ниже -

[
   [
      "a", 
      "b"
   ], 
   
   {
      "a": "b"
   }, 
   
   "a", 
   "b", 
   "c"
]