Более чистый способ перебора вложенных JSON в ruby - PullRequest
1 голос
/ 13 марта 2020

Мне было интересно, есть ли какой-нибудь "более чистый" способ циклического перебора вложенных JSON в ruby? Это мой 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[]

Текущий подход кода

1011 *

1 Ответ

1 голос
/ 13 марта 2020

Вы можете использовать flat_map и dig:

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 содержит массив с одним ха sh. Возможно, для этого достаточно ха sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...