首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析ruby脚本中的JSON文件并存储特定值

解析ruby脚本中的JSON文件并存储特定值
EN

Stack Overflow用户
提问于 2019-06-11 04:47:46
回答 2查看 217关注 0票数 0

解析Ruby脚本中的JSON文件并获取"key“的值

我的JSON文件如下所示

代码语言:javascript
复制
"terraform": [
    {
  "backend": [
    {
      "s3": [
        {
          "bucket": "terraform-dev",
          "dynamodb": "terraform_files",
          "encrypt": "true",
          "key": "Apple/Employee/Background/terraform.tfstate"
        }
      ]
     }
  ],
  "required_version": "~> 0.11.8"
}
] 

我试着用Ruby编写这个脚本

代码语言:javascript
复制
#!/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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-11 05:13:53

由于conf.json的结构,它由{}和[]组成,很难通过其名称访问每个键。所以使用mykey = data['terraform'][0]['backend'][0]['s3'][0]['key']

在这里,terraform是{}中的单个对象,可以通过其名称进行访问。它包含一个数组对象[],因为只有一个元素,所以必须通过索引访问该对象。内部元素也是如此。'{ }‘用于键值对对象,'[]’用于具有json中值的数组。

并将整个"terraform“包含在conf.json中的{}中。

票数 1
EN

Stack Overflow用户

发布于 2019-06-11 05:21:46

Hash#dig用于根据数组的索引访问数组:

代码语言:javascript
复制
p hash.dig(:terraform, 0, :backend, 0, :s3, 0, :key)
# "Apple/Employee/Background/terraform.tfstate"

加号是,如果某个中间步骤为nil,则返回nil:

代码语言:javascript
复制
p foo.dig(:terraform, 0, :backend, 0, :s3, 1, :key) # nil
p foo.dig(:terraform, 0, :backend, 0, :orale, 0, :key) # nil
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56533320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档