2013-02-26 2 views
-1

У меня есть хорошо структурированный (созданный человеком) JSON-файл, который я хотел бы программно добавлять и обновлять значения.Чтение и запись JSON и сохранение форматирования в Ruby

Проблема в том, что существующую структуру файла JSON очень легко читать для меня и моих коллег, и мы хотели бы, чтобы он оставался в том же (или очень похожем) отступе, межстрочном интервалах и порядке клавиш и т. Д. .

Есть ли способ сделать это с помощью Ruby?

+0

Что связано с управлением JSON с Rails? –

+0

@WaleedKhan Rails имеет http://api.rubyonrails.org/classes/ActiveSupport/JSON.html, так что это может быть полезно для решения или нет. Это не имеет большого значения. –

+0

Это будет [Атрибут ActiveSupport] (https://rubygems.org/gems/activesupport). –

ответ

1

JSON от Ruby поддерживает pretty_generate, что является «красивым» генератором, но никоим образом не будет пытаться запомнить, как вы структурировали конкретный файл данных JSON, и не должен.

 
foo = {'a' => 1, 'b' => %w[2 3]} 
puts JSON.generate(foo) 
{"a":1,"b":["2","3"]} 
puts JSON.pretty_generate(foo) 
{ 
    "a": 1, 
    "b": [ 
    "2", 
    "3" 
    ] 
} 

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

Помните, что добавление «довольно» на выходе увеличивается размер данных, перемещаемых без улучшения качества:

 
puts JSON.generate(foo).size 
21 

puts JSON.pretty_generate(foo).size 
43 

Making только что маленький хэш «довольно» удвоенный размер, который в течение долгого времени , уменьшает пропускную способность для браузеров или между сетями между серверами. Я бы рекомендовал только беспокоиться о «хорошем» выходе, когда первоначально отлаживал ваш код, а затем отказывался от него, когда вы довольны движением данных, в пользу скорости и эффективности. Данные будут одинаковыми.

Если вы беспокоитесь о возможности изменения некоторых данных, напишите простой читатель и/или генератор JSON, который работает со стандартным объектом данных Ruby, затем пусть JSON сериализует его и записывает вывод в файл ,

+0

Да, я уже использую pretty_generate. –

Смежные вопросы