8

インライン アプリの 1 つの構成ファイルを作成しています。基本的にはjsonファイルです。puppet/ruby 1.8 で毎回同じ方法でハッシュ/json を出力するのに苦労しています。

私は現在使用しています

<%= require "json"; JSON.pretty_generate data %>

しかし、人間が読めるコンテンツを出力している間は、毎回同じ順序になるとは限りません。つまり、パペットは同じデータに対して頻繁に変更通知を送信します。

私も試してみました

<%= require "json"; JSON.pretty_generate Hash[*data.sort.flatten] %>

毎回同じデータ/順序が生成されます。問題は、データにネストされた配列がある場合に発生します。

data => { beanstalkd => [ "server1", ] }

になる

"beanstalkd": "server1",

それ以外の

"beanstalkd": ["server1"],

私はこれで数日間オンとオフを戦ってきたので、助けが欲しい

4

2 に答える 2

0

ハッシュは順序付けられていないデータ構造です。一部の言語(たとえば、ruby)には、順序付けられたバージョンのハッシュがありますが、ほとんどの場合、ほとんどの言語では、ハッシュ内の特定の順序に依存するべきではありません。

順序が重要な場合は、配列を使用する必要があります。だから、あなたのハッシュ

{a: 1, b: 2}

これになります

[{a: 1}, {b: 2}]

私は、それはあなたのコードにあまり多くの変更を強制しないと思います。

あなたの状況への回避策

これを試して:

data = {beanstalkId: ['server1'], ccc: 2, aaa: 3}

data2 = data.keys.sort.map {|k| [k, data[k]]}

puts Hash[data2]
#=> {:aaa=>3, :beanstalkId=>["server1"], :ccc=>2}
于 2012-03-16T08:06:21.143 に答える