Вопрос по hash, ruby, yaml – Конвертировать Ruby Hash в YAML

33

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

hostname1.test.com:
  public: 51
  private: 10

{"hostname1.test.com"=>
   {"public"=>"51", "private"=>"10"},
 "hostname2.test.com"=>
   {"public"=>"192", "private"=>"12"}
}

Я не уверен, как именно сделать это преобразование в эту строку, хотя.

Я просмотрел документацию по HASH и не смогне могу найти ничего дляto_yaml, Я нашел это в поискахto_yaml который становится доступным, когда выrequire yaml, Я также пытался использовать метод Enumerablecollect но запутался, когда мне нужно было перебрать значение (еще один хеш) .I '

я пытаюсь использоватьПреобразование хеша в строку в Ruby " в качестве ссылки. Моя мысль была тогда кормить это вYAML::load и это произвело бы YAML, который я хотел.

Вы читали через РубиДокументация YAML? Как насчет "Поваренная книга Yaml на сайте YamlForRuby? Кроме того, ваш хэш нет действительный. Это должен быть массив хэшей или хэш хэшей? the Tin Man
Вы также должны были предоставить код, показывающий, что вымы пытались вместе с объяснением того, что нет работа. -1 за отсутствие усилий. the Tin Man
to_yaml не является частью Hash или Object или любого класса по умолчанию. ВыИМЕТЬ вrequire 'yaml' где-нибудь в скрипте или в чем-то, что вам нужно, чтобы YAML расширял Object, Hash и другие методы. Смотрите редактирование моего ответа. the Tin Man
Добавил работу, которую я проделал до нахождения метода to_yaml. Shail Patel

Ваш Ответ

2   ответа
53

Вот'как ябуду делать это:

require 'yaml'

HASH_OF_HASHES = {
  "hostname1.test.com"=> {"public"=>"51", "private"=>"10"},
  "hostname2.test.com"=> {"public"=>"192", "private"=>"12"}
}

ARRAY_OF_HASHES = [
  {"hostname1.test.com"=> {"public"=>"51", "private"=>"10"}},
  {"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}}
]

puts HASH_OF_HASHES.to_yaml
puts
puts ARRAY_OF_HASHES.to_yaml

Какие выводы:

---
hostname1.test.com:
  public: '51'
  private: '10'
hostname2.test.com:
  public: '192'
  private: '12'

---
- hostname1.test.com:
    public: '51'
    private: '10'
- hostname2.test.com:
    public: '192'
    private: '12'

Класс Object имеет метод to_yaml. Я использовал это, и он сгенерировал файл YAML правильно.

Нетт.

Это из недавно открытого сеанса IRB:

Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
5

to_yaml метод на хеш для этого я верю после васrequire yaml

Хэш нене иметьto_yaml метод. the Tin Man
Объект делаетне иметьto_yaml метод, ТолькоYAML класс есть, и он расширяет другие классы, когдатребуется. the Tin Man

Похожие вопросы