在ruby中迭代嵌套JSON的更简洁方法

问题描述 投票:0回答:1

我想知道是否有任何“更清洁”的方式在Ruby中循环通过嵌套的JSON?这是我的JSON对象:

{
  "data": [
    {
      "file": "test/test_project_js/jquery.js",
      "results": [
        {
          "vulnerabilities": [
            {
              "severity": "high"
            },
            {
              "severity": "medium"
            },
            {
              "severity": "none"
            },
            {
              "severity": "high"
            }
          ]
        }
      ]
    },
    {
      "file": "test/test_project_js/jquery.js",
      "results": [
        {
          "vulnerabilities": [
            {
              "severity": "none"
            },
            {
              "severity": "none"
            },
            {
              "severity": "none"
            },
            {
              "severity": "high"
            }
          ]
        }
      ]
    }
  ]
}

我想在severity下的每个vulnerability内部存在的每个results[]下提取data[]

当前代码方法是

severity_arr = raw['data'].each do |data|
  data['results'].each do |result|
    result['vulnerabilities'].map {|vulnerability| vulnerability['severity']}
  end
end
json ruby loops nested
1个回答
0
投票

您可以使用flat_mapdig

data[:data].flat_map { |datum| datum.dig(:results, 0, :vulnerabilities) }
# [{:severity=>"high"}, {:severity=>"medium"}, {:severity=>"none"}, {:severity=>"high"}, {:severity=>"none"}, {:severity=>"none"}, {:severity=>"none"}, {:severity=>"high"}]

可能不方便的是,data.results拥有一个带有单个哈希的数组。也许哈希就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.