Удалите повторяющиеся значения из JSON с помощью jq - PullRequest
0 голосов
/ 21 ноября 2018

Я объединяю два json-файла с jq

(group_by( [."contraction", "definitions"]) | map((.[0]|del(."definitions" [])) + { "definitions": (map(."definitions" [])) }))

, что приводит к следующему результату:

  [
  {
    "contraction": "TEST_1",
    "definitions": [
      {
        "search": "1",
        "replace": "12"
      },
      {
        "search": "3",
        "replace": "4"
      },
      {
        "search": "6",
        "replace": "2"
      },
      {
        "search": "1",
        "replace": "1"
      }
    ]
  },
  {
    "contraction": "TEST_2",
    "definitions": [
      {
        "search": "A",
        "replace": "post"
      },
      {
        "search": "B",
        "replace": "prae"
      },
      {
        "search": "A",
        "replace": ""
      }
    ]
  }
]

, но теперь я хочу избавиться от повторяющихся записей, которыеУ них та же строка в их атрибуте поиска.

Я пробовал фильтры unique и unique_by, но это приводит к ошибкам комплимента.

результат должен быть:

  [
  {
    "contraction": "TEST_1",
    "definitions": [
      {
        "search": "1",
        "replace": "12"
      },
      {
        "search": "3",
        "replace": "4"
      },
      {
        "search": "6",
        "replace": "2"
      }
    ]
  },
  {
    "contraction": "TEST_2",
    "definitions": [
      {
        "search": "A",
        "replace": "post"
      },
      {
        "search": "B",
        "replace": "prae"
      }
    ]
  }
]

это возможно с jq?потому что я не пытаюсь фильтровать ключи, но нормальные значения.есть идеи?

код на JQPlay

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете просто расширить свой фильтр следующим образом:

map( .definitions |= unique_by(.search) )
...