【发布时间】:2015-08-19 11:49:20
【问题描述】:
我正在尝试从 JSON 解析文件中选择一个节点,并通过使用点分隔节点来显示节点/键层次结构。
json_hash =
{
"Samples": {
"Locations": {
"Presets": "c:\\Presets\\Inst",
"Samples": "c:\\Samples\\seperates\\round_robin"
},
"Format": {
"Type": "AIFF",
"Samplerate": 48,
"Bitrate": 24
},
"Groupings": {
"Type": "dynamic",
"Sets": {
"Keyswitch": "enabled",
"Mods": "Enabled"
}
},
"Ranges": {
"Keys": {
"LowKey": 30,
"HighKey": 80,
"LowVel": 0,
"MidVel": 53,
"HighVel": 127
}
},
"Dynamics": {
"DN": {
"MultiRange": "enabled",
"Range": [
"0-36",
"37-80"
]
}
}
},
"Modulation": {
"Pitch": true,
"Range": []
},
"Encoded": false,
"test": "test_one"
}
我的想法是输出这样的东西;
Samples.Locations.Presets => c:\Presets\Inst
Samples.Locations.Samples => c:\Samples\seperates\round_robin
我设法得到了这个;
Presets. => c:\Presets\Inst
Presets.Samples. => c:\Samples\seperates\round_robin
使用此代码:
def node_tree(hash)
kl = ''
hash.each do |k, v|
kl << "#{k}."
if v.kind_of?(Hash)
node_tree(v)
else
print "#{kl} => "
print "#{Array(v).join(', ')}\n"
end
end
end
node_tree(json_hash)
如果我可以显示完整的节点层次结构,然后能够使用点分隔节点选择一个节点并更改值,那就太好了。
所以我可以将 Samples.Dynamics.DN.Range 从 0-36, 37-80 更改为 0-30, 31-60, 61-90
key = 'Samples.Dynamics.DN.Range'
value = %w(0-30 31-60 61-90)
node_set('Samples.Dynamics.DN.Range', value)
在我弄清楚如何最好地显示和选择节点和值之前,我无法处理后者。
【问题讨论】:
-
我不太明白
Presets和Samples路径与Samples.Dynamics.DN.Range的关系。