从Ruby读取JSON文件(在Mac OS X上)

时间:2013-12-31 15:30:28

标签: ruby macos

我不是Ruby编码器,但我确实需要读取Json文件并使用这种语言访问节点。

我完成了我的作业,但由于我缺乏知识,我无法完成它们,我希望你可以补偿。

让我们从我的示例Json文件开始。

{
"app": [{
  "name":"test", 
  "ip_address": "172.90.90.90"
}],
"mysql": [{
  "server_password": "root",
  "dbName":"dbname"
}],
"phpmyadmin": [{
  "app_username": "root",
  "app_password": "root"
}]
}

这是我放在一起阅读文件的小代码片段。

require 'json'
data = JSON.parse(File.read("data.json"))

现在,只要我做

之类的事情
print data[0] 

print data["app"]

一切都很好,但是如果我尝试访问子节点“app”。“name”,无论我采用的格式还是括号,我总是会遇到系统异常。我期待以最合理的方式做这样的事情,比如数据[“app”] [“name”],但显然不是这样。

我在Mac OS X上使用ruby编译器对此进行测试,根据我的理解,Ruby版本应该是最新的(ruby 2.0.0p247)

你能帮帮我吗? 谢谢,祝新年快乐。

2 个答案:

答案 0 :(得分:2)

原因是因为data["app"]是一个数组:

1.9.3p484 :001 > require 'json'
 => true 

1.9.3p484 :002 > data = JSON.parse(File.read("/Users/example/Desktop/json.json"))
 => {"app"=>[{"name"=>"test", "ip_address"=>"172.90.90.90"}], "mysql"=>[{"server_password"=>"root", "dbName"=>"dbname"}], "phpmyadmin"=>[{"app_username"=>"root", "app_password"=>"root"}]} 

1.9.3p484 :003 > print data["app"]
[{"name"=>"test", "ip_address"=>"172.90.90.90"}]

如果你data["app"].first["name"],你会得到你想要的东西:

1.9.3p484 :004 > print data["app"].first["name"]
test

答案 1 :(得分:1)

在您的示例数据中,app包含一个数组,因此您需要访问它:

data["app"][0]["name"]