Home > OS >  Parse multi level JSON with Ruby
Parse multi level JSON with Ruby

Time:01-14

I am trying to parse the JSON file below. The problem is I cannot return "Mountpoint" as a key. It only gets parsed as a value. This is the command I am using to parse it json_data = JSON.parse(readjson). The reason I guess that it's a key is because if I run json_data.keys only EncryptionStatus and SwitchName are returned. Any help would be greatly appreciated.

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

I tried using dig as a part of my JSON.parse but that didn't seem to help me.

CodePudding user response:

JSON data can have multiple levels.

Your JSON document is a

Hash (Dictionary/Map/Object in other languages) that has two keys ("EncryptionStatus", "SwitchName"),

The value for the "EncryptionStatsu" key is an Array of Hashes (with keys "MountPoint" and "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

This will print out

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

If you want to access a specific item you can look at the dig method. E.g.

json.dig("EncryptionStatus", 3)

Would return the information for mountpoint "H"

  • Related