我正在构建一个内联应用程序的配置文件.它本质上是一个json文件.我在使用puppet/ruby 1.8以每次输出hash/json时都遇到了很多麻烦.
我正在使用
<%= require "json"; JSON.pretty_generate data %>
Run Code Online (Sandbox Code Playgroud)
但是在输出人类可读内容时,每次都不能保证相同的顺序.这意味着木偶将经常针对相同的数据发送更改通知.
我也试过了
<%= require "json"; JSON.pretty_generate Hash[*data.sort.flatten] %>
Run Code Online (Sandbox Code Playgroud)
每次都会生成相同的数据/顺序.当数据具有嵌套数组时会出现问题.
data => { beanstalkd => [ "server1", ] }
Run Code Online (Sandbox Code Playgroud)
变
"beanstalkd": "server1",
Run Code Online (Sandbox Code Playgroud)
代替
"beanstalkd": ["server1"],
Run Code Online (Sandbox Code Playgroud)
我现在已经和它一起打了几天,所以想要一些帮助
哈希是一种无序的数据结构。在某些语言(例如 ruby)中,存在哈希的有序版本,但在大多数情况下,在大多数语言中,您不应该依赖哈希中的任何特定顺序。
如果顺序对您很重要,则应该使用数组。所以,你的哈希值
{a: 1, b: 2}
Run Code Online (Sandbox Code Playgroud)
变成这个
[{a: 1}, {b: 2}]
Run Code Online (Sandbox Code Playgroud)
我认为,它不会强制您的代码进行太多更改。
尝试这个:
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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5372 次 |
| 最近记录: |