Почему этот неправильный синтаксис YAML? - PullRequest
1 голос
/ 15 февраля 2012

Я запускаю программу на Ruby on Rails, и в YAML настроен массив хэшей. Я получаю ArgumentError, очевидно, за то, что открывающая фигурная скобка находится на той же строке, что и закрывающая скобка для предыдущего хеша.

Например, у меня есть:

features: [
  {
    name: lorem ipsum,
    bullets: [
      "bullet 1",
      "bullet 2"
    ]
  },{
    name: lorem ipsum 2,
    bullets: [
    ...
  }
]

и это дает мне ошибку. Однако, когда я помещаю открывающую фигурную скобку на новую строку, вот так:

  },
  {
    name: lorem ipsum 2,
    ...

работает нормально.

Я использую Ruby v. 1.8.7, Rails v. 3.2.1 и Rails Config v. 0.2.4 для чтения в файле YAML и доступа к нему в моем приложении.

Любые идеи, как заставить YAML принять мой синтаксис, не делая это последним способом?

Ответы [ 3 ]

7 голосов
/ 15 февраля 2012

YAML не использует фигурные скобки, скобки и т. Д. Вместо этого все уже будет обрабатываться как хэш как есть, и вам нужно только вставить дефисы перед элементами списка:

features:
- name: lorem ipsum
  bullets:
  - bullet 1
  - bullet 2
- name: lorem ipsum 2
  bullets:
  - ...

Загрузка этого даст вам:

{"features"=>[
  {
    "name"=>"lorem ipsum", 
    "bullets"=>["bullet 1", "bullet 2"]
  },
  {
    "name"=>"lorem ipsum 2",
    "bullets"=>["..."]
  }
]}
3 голосов
/ 15 февраля 2012

Ruby 1.8 использует библиотеку Syck для анализа yaml, которая реализует только версию 1.0 спецификации YAML (и также не поддерживается и т. Д.).

С более новым парсером YAML (например, psych, доступным в ruby ​​1.9), который поддерживает версию 1.1 спецификации yaml, ваши файлы анализируются. Просто сделай

require 'psych'
require 'yaml'

, чтобы убедиться, что вы используете psych (проверьте значение YAML::ENGINE). Не похоже, что псих доступен для ruby ​​1.8, хотя

Это, однако, немного необычно выглядящий ямл, по крайней мере, в рубиновом мире - переформатирование его Диланом встречается чаще. Согласно spec yaml в эти дни фактически является надмножеством JSON (которое прошло мимо меня!)

2 голосов
/ 07 декабря 2015

YAML в вопросе не идиоматичен, но на самом деле он почти легален. YAML требует пробела после запятых в списках, которых нет в строке 8.

Исправлено YAML:

features: [
  {
    name: lorem ipsum,
    bullets: [
      "bullet 1",
      "bullet 2"
    ]
  }, {
    name: lorem ipsum 2,
    bullets: []
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...