JOLT - преобразование массива объектов JSON, содержащих вложенные массивы, в соответствующие группы массивов. - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу преобразовать входной файл JSON в ожидаемый выходной файл JSON:

Мой входной файл:

[
  {
    "category": [
      {
        "id": "id1",
        "name": "Connected Home & Housewares1"
      },
      {
        "id": "id2",
        "name": "Housewares1"
      },
      {
        "id": "id3",
        "name": "Household Batteries1"
      },
      {
        "id": "id4",
        "name": "Alkaline Batteries1"
      }
    ]
  },
  {
    "category": [
      {
        "id": "id1",
        "name": "Connected Home & Housewares2"
      },
      {
        "id": "id2",
        "name": "Housewares2"
      },
      {
        "id": "id3",
        "name": "Household Batteries2"
      },
      {
        "id": "id4",
        "name": "Alkaline Batteries2"
      }
    ]
  }
]

(Выше приведен только пример 2записей, но содержит ~ 50 тыс. записей)

Ожидаемый результат:

[
  {
    "childSKUs": [
      {
        "divisionName": "Connected Home & Housewares1",
        "deptName": "Housewares1",
        "className": "Household Batteries1"
      }
    ]
  },
  {
    "childSKUs": [
      {
        "divisionName": "Connected Home & Housewares2",
        "deptName": "Housewares2",
        "className": "Household Batteries2"
      }
    ]
  }
]

Моя текущая спецификация JOLT:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "category": {
          "0": {
            "name": "[0].childSKUs[&1].divisionName"
          },
          "1": {
            "name": "[0].childSKUs[&1].deptName"
          },
          "2": {
            "name": "[0].childSKUs[&1].className"
          }
        }
      }
    }
  }
]

Но он дает только следующий вывод:

[
  {
    "childSKUs": [
      {
        "divisionName": [
          "Connected Home & Housewares1",
          "Connected Home & Housewares2"
        ]
      },
      {
        "deptName": [
          "Housewares1",
          "Housewares2"
        ]
      },
      {
        "className": [
          "Household Batteries1",
          "Household Batteries2"
        ]
      }
    ]
  }
]

Я пробовал разные варианты, играя в https://jolt -demo.appspot.com , но нетпока удачи. Любая помощь приветствуется. Также было бы здорово, если бы вы объяснили свой SPEC, как это было сделано.

1 Ответ

0 голосов
/ 07 ноября 2019

Хорошо, я понял это сам.

Благодаря ответу @ Pokuri здесь, который дал мне идею прийти к решению: https://stackoverflow.com/a/55861132/248847

Правильный JOLT SPEC дляПриведенный выше вопрос:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "category": {
          "0": {
            "name": "[&3].childSKUs[&1].divisionName"
          },
          "1": {
            "name": "[&3].childSKUs[0].deptName"
          },
          "2": {
            "name": "[&3].childSKUs[0].className"
          }
        }
      }
    }
  }
]
...