生成表和访问哈希数组的元素

时间:2016-07-15 17:51:59

标签: ruby-on-rails arrays ruby json hash

我在rails应用程序中有以下哈希数组:

a = ["{\"ROW1\"=>{\"correct\"=>{\"h\"=>\"10\", \"m\"=>\"11\", \"l\"=>
\"12\"}, \"wrong\"=>{\"h\"=>\"2\", \"m\"=>\"2\", \"l\"=>\"4\"}, \"blank
\"=>{\"h\"=>\"2\", \"m\"=>\"4\", \"l\"=>\"3\"}}, \"ROW2\"=>{\"correct
\"=>{\"h\"=>\"2\", \"m\"=>\"4\", \"l\"=>\"4\"}, \"wrong\"=>{\"h
\"=>\"4\", \"m\"=>\"6\", \"l\"=>\"6\"}, \"blank\"=>{\"h\"=>\"7\", 
\"m\"=>\"5\", \"l\"=>\"6\"}}, \"ROW3\"=>{\"correct\"=>{\"h\"=>\"4\", 
\"m\"=>\"6\", \"l\"=>\"7\"}, \"wrong\"=>{\"h\"=>\"6\", \"m\"=>\"7\", 
\"l\"=>\"5\"}, \"blank\"=>{\"h\"=>\"7\", \"m\"=>\"9\", \"l\"=>
\"3\"}}}"]

我想访问它的元素并从中创建一个数据库表,格式如下

ROW1          correct    h=10, m=11,l=12
              wrong      h=2, m=2,l=4
              blank      h=2, m=4,l=3

......和ROW2和ROW3类似。

我该怎么做?

我尝试使用

访问某个值
a["ROW1"]["Correct"]["h"] 

...但它返回一个零值。

如何访问此哈希数组的值?

1 个答案:

答案 0 :(得分:3)

你需要先将字符串转换为hash,这可以按如下方式进行:

require 'json'

a = ["{\"ROW1\"=>{\"correct\"=>{\"h\"=>\"10\", \"m\"=>\"11\", \"l\"=>
\"12\"}, \"wrong\"=>{\"h\"=>\"2\", \"m\"=>\"2\", \"l\"=>\"4\"}, \"blank
\"=>{\"h\"=>\"2\", \"m\"=>\"4\", \"l\"=>\"3\"}}, \"ROW2\"=>{\"correct
\"=>{\"h\"=>\"2\", \"m\"=>\"4\", \"l\"=>\"4\"}, \"wrong\"=>{\"h
\"=>\"4\", \"m\"=>\"6\", \"l\"=>\"6\"}, \"blank\"=>{\"h\"=>\"7\", 
\"m\"=>\"5\", \"l\"=>\"6\"}}, \"ROW3\"=>{\"correct\"=>{\"h\"=>\"4\", 
\"m\"=>\"6\", \"l\"=>\"7\"}, \"wrong\"=>{\"h\"=>\"6\", \"m\"=>\"7\", 
\"l\"=>\"5\"}, \"blank\"=>{\"h\"=>\"7\", \"m\"=>\"9\", \"l\"=>
\"3\"}}}"
]

hash_string = a[0]
hash = JSON.parse hash_string.gsub("\n", '').gsub('=>', ':')

# you access the hash now:
hash["ROW1"]["correct"]["h"]
# => 10
请注意,有一个错字。密钥为Correct,而不是correct而不是c,而不是C

希望有所帮助:)