выровнять структуру, где элементы могут быть объектом или вложенным массивом - PullRequest
0 голосов
/ 29 марта 2020

У меня есть JSON документ, который я хотел бы сгладить, где я получаю результирующий объект, похожий на этот:

[
  {
    "name": "Form/Field/Tokens.php",
    "line": "62",
    "severity": "info",
    "message": "Expected @param annotation",
    "source": "PhanCommentParamOutOfOrder"
  }
]

Чтобы сделать это, мне нужно сгладить объект file но разные представляют вложенный узел error как объект или массив. Я не уверен, как сгладить это.

Вот данный документ.

{
  "version": "6.5",
  "file": [
    {
      "name": "Form/Field/Tokens.php",
      "error": {
        "line": "62",
        "severity": "info",
        "message": "Expected @param annotation",
        "source": "PhanCommentParamOutOfOrder"
      }
    },
    {
      "name": "Console/Command/Reference.php",
      "error": [
        {
          "line": "40",
          "severity": "warning",
          "message": "Possibly zero references to use statement",
          "source": "PhanUnreferencedUseNormal"
        },
        {
          "line": "54",
          "severity": "warning",
          "message": "Property has undeclared type",
          "source": "PhanUndeclaredTypeProperty"
        }
      ]
    }
  ]
}

1 Ответ

2 голосов
/ 29 марта 2020

Учитывая встроенную JQ type, вам просто нужно выражение if-then-else, чтобы определить, является ли .file.error массивом или объектом.

.file | map({name} + (.error |
  if type == "array" then .[] else . end))

Онлайн-демонстрация

...