プログラムで値を追加および更新したい、適切に構造化された (人間が作成した) JSON ファイルがあります。
問題は、JSON ファイルの現在の構造が私と私の同僚にとって非常に読みやすいことであり、インデント、行間隔、キーの順序などを同じ (または非常に類似した) ままにしたいと考えています。
Rubyでこれを行う方法はありますか?
Ruby の JSONpretty_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 と同様に、データを正確に移動するように設計されています。任意の行間、または先頭の空白を維持しながらそれを行うと、シリアライザーには何の価値もありません。
出力に「pretty」を追加すると、移動するデータのサイズが増加しますが、品質は向上しません。
puts JSON.generate(foo).size 21 JSON.pretty_generate(foo).size を置きます 43
その小さなハッシュを「きれい」にすると、サイズが 2 倍になり、時間の経過とともに、ブラウザーまたはサーバー間のネットワーク全体のスループットが低下します。最初にコードをデバッグするときは「きれいな」出力だけを気にし、データの移動に満足したら、速度と効率を優先して放棄することをお勧めします。同じデータになります。
一部のデータを変更できるか心配な場合は、標準の Ruby データ オブジェクトから動作する単純なリーダーや JSON ジェネレーターを作成し、JSON でシリアル化して、出力をファイルに書き込みます。