Загрузка и генерация файла Yaml с аналогичными ключами
у меня есть документ файла yaml, который имеет похожие ключи : -
sample_file.в формате YML
line:
title: line-name
department: transcription
input_formats:
- input_format:
name: company
required: true
valid_type: general
- input_format:
name: website
required: false
valid_type: url
после генерации new_file.yml ключи сортируются в алфавитном порядке : -
new_file.в формате YML
line:
department: transcription
input_formats:
-
input_format:
name: company
required: true
valid_type: general
-
input_format:
name: website
required: false
valid_type: url
title: line-name
код для открытия sample_file и создания new_file приведен ниже : -
require 'yaml'
require 'ya2yaml'
@file = YAML::load(File.open("/Users/manish/Desktop/yaml/sample_file.yml"))
@new_file = File.new("/Users/manish/Desktop/yaml/new_file.yml", "w+")
@new_file.syswrite(@file.ya2yaml(:hash_order => ['title','department','input_formats']))
Я использую драгоценный камень "ya2yaml" для создания файла yaml. Чтобы получить тот же порядок, что и в sample_file.yml я использовал hash_order здесь @new_file.syswrite(@file.ya2yaml(:hash_order => ['title','department','input_formats']))
, но это не работает. Как я могу сохранить заказ?
3 ответов
наконец, я получил решение проблемы заказа.
:Hash_order работает только для хэша верхнего уровня.
поэтому он работает только тогда, когда я удаляю ключ "line" из моего sample_file.в формате YML. То порядок сохраняется. :-
title: line-name
department: transcription
input_formats:
- input_format:
name: company
required: true
valid_type: general
- input_format:
name: website
required: false
valid_type: url
можете ли вы изменить формат файла YAML? Ваш файл YAML указывает хэш с дубликатами ключей. Это нет-нет.
если вместо файла YAML используется список, например:
line:
title: line-name
department: transcription
formats:
- input_format:
name: company
required: true
valid_type: general
- input_format:
name: website
required: false
valid_type: url
....
эти дополнительные тире решат вашу проблему за вас.
YAML предназначен для хранения пар ключ-значение, поэтому их порядок не особенно важен для YAML.
Что может решите вашу проблему с помощью Ruby 1.9.2, который уважает порядок вставки в хэшах (чего нет в Ruby 1.8.7).