用Ruby解析多级JSON

h7wcgrx3  于 2023-01-14  发布在  Ruby
关注(0)|答案(1)|浏览(169)

我正在尝试解析下面的JSON文件。问题是我无法将“Mountpoint”作为键返回。它只被解析为值。这是我用来解析它的命令json_data = JSON.parse(readjson)。我猜测它是键的原因是因为如果我运行json_data.keys,则只会返回EncryptionStatus和SwitchName。如果有任何帮助,我们将不胜感激。

{
  "EncryptionStatus": [
    {
      "MountPoint": "C:",
      "VolumeStatus": "FullyEncrypted"
    },
    {
      "MountPoint": "F:",
      "VolumeStatus": "FullyEncrypted"
    },
    {
      "MountPoint": "G:",
      "VolumeStatus": "FullyEncrypted"
    },
    {
      "MountPoint": "H:",
      "VolumeStatus": "FullyEncrypted"
    }
  ],
  "SwitchName": [
    "LAN",
    "WAN"
  ]
}

我试着把dig作为我的JSON.parse的一部分,但似乎没有帮助。

cwtwac6a

cwtwac6a1#

JSON数据可以有多个级别。
您的JSON文档是
散列(其他语言中的字典/Map/对象),具有两个密钥(“EncryptionStatus”、“SwitchName”),
“EncryptionStatsu”键的值是一个哈希数组(具有键“MountPoint”和“VolumeStatus”)。

# assuming your JSON is in a file called "input.json"
data = File.read("input.json")
json = JSON.parse(data)
json["EncryptionStatus"].each do |encryption_status|
  puts "#{encryption_status["MountPoint"]} is #{encryption_status["VolumeStatus"]}"
end

这将打印出来

C: is FullyEncrypted
F: is FullyEncrypted
G: is FullyEncrypted
H: is FullyEncrypted

如果你想访问一个特定的项目,你可以查看dig方法。

json.dig("EncryptionStatus", 3)

将返回装载点“H”的信息

相关问题