动态访问Ruby JSON对象变量

时间:2017-03-31 11:39:29

标签: json ruby

puts @file
# {
#   "0.js": "js/0.js",
#   "about-page.js": "js/about-page.js",
#   "img/heart.png": "img/ae985f1437f67f39c4393e31c6785970.png",
#   "index-page.js": "js/index-page.js",
#   "init.js": "js/init.js",
#   "main.js": "js/main.js"
# }
a = "0.js"
puts a // => "0.js"
puts @file[a] // => "0.js"  ????!!!???

为什么上面的代码不起作用?我希望最后一行输出"js/0.js"而不是"0.js"

由于

2 个答案:

答案 0 :(得分:1)

因为你的哈希就是这样创建的

{:"0.js"=>"js/0.js",
 :"about-page.js"=>"js/about-page.js",
 :"img/heart.png"=>"img/ae985f1437f67f39c4393e31c6785970.png",
 :"index-page.js"=>"js/index-page.js",
 :"init.js"=>"js/init.js",
 :"main.js"=>"js/main.js"}

要访问它,您需要执行@file[:"0.js"]

答案 1 :(得分:0)

首先,使用JSON.parse()

将字符串转换为对象

然后,您的代码将正常工作。

require json

file = '{"0.js": "js/0.js","about-page.js": "js/about-page.js","img/heart.png": "img/ae985f1437f67f39c4393e31c6785970.png","index-page.js": "js/index-page.js","init.js": "js/init.js","main.js": "js/main.js"}'

file2 = JSON.parse(file)

==> {"0.js"=>"js/0.js", "about-page.js"=>"js/about-page.js", "img/heart.png"=>"img/ae985f1437f67f39c4393e31c6785970.png", "index-page.js"=>"js/index-page.js", "init.js"=>"js/init.js", "main.js"=>"js/main.js"}

a = "0.js"

puts a  => "0.js"

puts file2[a] // => "js/0.js"