【发布时间】:2013-01-22 23:14:52
【问题描述】:
我正在尝试遍历 JSON 解析哈希表(具有嵌套的哈希数组)并插入到 Text Table 中。我试图迭代的 JSON 解析代码是:
{"server"=>{"security_groups"=>[{"name"=>"default"}], "adminPass"=>"LhXEPMkYmqF7", "id"=>"82b7e32b-f62b-4106-b499-e0046250229f", "links"=>[{"href"=>"http://10.30.1.49:8774/v2/89fc0b9d984d49fba5328766e923958f/servers/82b7e32b-f62b-4106-b499-e0046250229f", "rel"=>"self"}, {"href"=>"http://10.30.1.49:8774/89fc0b9d984d49fba5328766e923958f/servers/82b7e32b-f62b-4106-b499-e0046250229f", "rel"=>"bookmark"}], "OS-DCF:diskConfig"=>"MANUAL"}}
我用来迭代顶部的代码是:
server_table = Text::Table.new do | t |
t.head = ['Server ID', 'Server URL', 'Admin Password']
end
response = JSON.parse(r)
response['server'].each do | serv_info |
server_table.rows << [["#{serv_info['id']}", "#{serv_info['links'][0]['href']}", "#{serv_info['adminPass']}"]]
end
puts server_table
我收到错误:
/lib/get_token.rb:166:in `[]': can't convert String into Integer (TypeError)
from ./lib/get_token.rb:166:in `create_server'
from ./lib/get_token.rb:165:in `each'
from ./lib/get_token.rb:165:in `create_server'
如果我单独使用 puts 打印出每个命令,它们可以正常工作,但迭代不会。提取正确信息的命令是:
puts response['server']['links'][0]['href']
puts response['server']['id']
puts response['server']['adminPass']
所有这 3 个工作,但如果我尝试迭代它们,我会得到字符串错误。我知道这与 .each 返回一个哈希数组有关,但我不完全理解为什么 PUTS 命令在脚本和 IRB 中都没有问题。
有什么想法吗?
【问题讨论】:
-
不要使用
puts,而是尝试使用pp,这将输出数据的格式化版本。这是一种帮助可视化您的数据结构真正是什么的临时方法。puts可以通过添加一个你并不真正注意的额外换行来掩盖嵌套。 -
很高兴知道,特别是因为我是新手 :) 谢谢伙计!