解析Ruby脚本中的JSON文件并获取"key“的值
我的JSON文件如下所示
"terraform": [
{
"backend": [
{
"s3": [
{
"bucket": "terraform-dev",
"dynamodb": "terraform_files",
"encrypt": "true",
"key": "Apple/Employee/Background/terraform.tfstate"
}
]
}
],
"required_version": "~> 0.11.8"
}
]
我试着用Ruby编写这个脚本
#!/usr/bin/env ruby
require "json"
file = File.open "/Users/Test/conf.json"
data = JSON.load file
mykey= data['terraform'].first['backend']['s3']['key']
print mykey
file.close
预期结果: Apple/Employee/Background/terraform.tfstate
错误消息:没有将字符串隐式转换为整数(TypeError)
发布于 2019-06-11 05:13:53
由于conf.json的结构,它由{}和[]组成,很难通过其名称访问每个键。所以使用mykey = data['terraform'][0]['backend'][0]['s3'][0]['key']
在这里,terraform是{}中的单个对象,可以通过其名称进行访问。它包含一个数组对象[],因为只有一个元素,所以必须通过索引访问该对象。内部元素也是如此。'{ }‘用于键值对对象,'[]’用于具有json中值的数组。
并将整个"terraform“包含在conf.json中的{}中。
发布于 2019-06-11 05:21:46
Hash#dig用于根据数组的索引访问数组:
p hash.dig(:terraform, 0, :backend, 0, :s3, 0, :key)
# "Apple/Employee/Background/terraform.tfstate"
加号是,如果某个中间步骤为nil,则返回nil:
p foo.dig(:terraform, 0, :backend, 0, :s3, 1, :key) # nil
p foo.dig(:terraform, 0, :backend, 0, :orale, 0, :key) # nil
https://stackoverflow.com/questions/56533320
复制相似问题