Это действительный YAML?

Итак, для синтаксического анализа текста на C# вопрос я обратился к YAML. Я наткнулся на стену с этой библиотекой, которую мне порекомендовали, так что это быстрый способ.

heading:
 name: A name
 taco: Yes
 age: 32

heading:
 name: Another name
 taco: No
 age: 27

И так далее. Это действительно так?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Валидация полей ввода для базовой формы React
Валидация полей ввода для базовой формы React
В одном из моих проектов MERN Stack есть форма с именем, фамилией, контактным номером, адресом, электронной почтой, датой рождения, номером NIC, весом...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
4
0
3 525
8

Ответы 8

Похоже, есть валидатор YAML под названием Квалифы, который должен дать вам ответ. Тебе нужно было просто использовать токенизацию String, чувак. Писать парсеры - это весело :)

Частично. YAML поддерживает понятие нескольких последовательных «документов». Если это то, что вы здесь пытаетесь сделать, то да, это правильно - у вас есть два документа (или фрагмента документа). Чтобы сделать это более явным, вы должны разделить их тремя тире, например:

---
heading:
 name: A name
 taco: Yes
 age: 32
---
heading:
 name: Another name
 taco: No
 age: 27

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

- heading:
  name: A name
  taco: Yes
  age: 32
- heading:
  name: Another name
  taco: No
  age: 27

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

Во втором примере вам нужно немного увеличить отступ строк «name», «taco» и «age». Прямо сейчас «заголовок» выровнен с ними, а PyYAML помещает «заголовок» в то же сопоставление с другими тремя.

eksortso 29.04.2009 07:38

AFAIK, посмотрев кратко на стандарт, кажется, что он должен работать так, как есть в настоящее время (однако я могу ошибаться). Опять же, я хочу сказать, что существует множество реализаций YAML, и не всегда ясен уровень совместимости между ними :-(

Grey Panther 29.04.2009 12:54
// YAML краток и удобочитаем / редактируется, но не доступен для записи человеком, поэтому вы всегда должны использовать библиотеки для его генерации // Everything else about this answer was spot on ... but what's this about? поднимает брови
dreftymac 07.10.2017 19:16

@dreftymac - например, YAML чувствителен к пробелам, что приносит весь багаж табуляции и пробелов, и мне всегда нужно включать "показывать пробелы" в моем редакторе при работе с YAML. Кроме того, помимо списков и словарей, мне довольно сложно запомнить синтаксис более экзотических элементов. задыхаться Мне даже XML легче писать, чем YAML :-)

Grey Panther 08.10.2017 20:16

@GreyPanther: Хммм ... интересно ... звучит как сильное личное предпочтение синтаксиса на основе отступов. Честно говоря, изначально я тоже не был фанатом. У Python и YAML есть архитектурные причины для этого, которые некоторые не предпочитают. Однако при хорошем текстовом редакторе и достаточном использовании выразительная сила обоих действительно может проявить себя для тех, кто не настроен против них. YAML можно широко писать вручную с помощью шаблонов, фрагментов кода и готовых шаблонов.

dreftymac 08.10.2017 21:36

Что ж, похоже, YAML исчез из окна. Я хочу что-то, как человеческое, так и читаемое и. Плюс эта реализация на C# ... Я понятия не имею, работает если или нет, документация состоит из нескольких примеров однострочного кода. Он использует собственные файлы YAML и является старым студенческим проектом. Единственный другой синтаксический анализатор C# YAML, который я нашел, использует MS-PL, что мне не очень удобно.

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

Обычно я стараюсь избегать некромантии, но в основном CDMan говорил полную ерунду, когда сказал, что это не может быть записано человеком. Это очень легко написать, так же просто, как и редактировать. Если вы понимаете важность пробелов в Python, вы можете без проблем написать YAML. ... В противном случае это было бы довольно глупо, поскольку одной из основных целей YAML было создание по-настоящему доступного для записи человеком.

kampu 26.05.2013 11:37

Здесь нужно согласиться с @kampu. YAML не менее удобен для человека, чем любой другой обычный текстовый файл, в котором пробелы используются для обозначения структуры и вложенности.

dreftymac 08.10.2017 21:39

Есть другая библиотека YAML для .NET, который находится в стадии разработки. Прямо сейчас он поддерживает чтение потоков YAML. Он был протестирован в Windows и Mono. Поддержка записи в настоящее время реализуется.

CodeProject есть по адресу:

http://www.codeproject.com/KB/recipes/yamlparser.aspx

Я не слишком много пробовал, но посмотреть стоит.

Вы можете увидеть результат в онлайн-парсере yaml:

http://yaml-online-parser.appspot.com/?yaml=heading%3A%0D%0A+name%3A+A+name%0D%0A+taco%3A+Yes%0D%0A+age%3A + 32% 0D% 0A% 0D% 0Aheading% 3A% 0D% 0A + name% 3A + Another + name% 0D% 0A + taco% 3A + No% 0D% 0A + age% 3A + 27% 0D% 0A & type = json

Как видите, создан только один узел заголовка.

Попробуйте это (онлайн-парсер YAML).

Вам не нужно ничего скачивать или что-то делать. Просто зайдите туда и скопируйте и вставьте. Вот и все.

Просто чтобы сделать явный комментарий по этому поводу: у вас есть проблема с дублированием ключа сопоставления. Процессор YAML разрешит это как карту !!, которая запрещает дублирование ключей. Однако не все процессоры применяют это ограничение, поэтому вы можете получить неверный результат, если передадите неправильный поток YAML процессору.

Другие вопросы по теме