Объединение двух массивов и преобразование с использованием Jolt - PullRequest
0 голосов
/ 19 февраля 2019

Мне тяжело с использованием отображения Джолта, пытающегося преобразовать ввод в нужную форму

Входной JSON

{
  "data": [
    {
      "name": "Alcohol",
      "collection_id": 123,
      "properties": [
        {
          "name": "Tax",
          "property_id": "00001"
        },
        {
          "name": "Expenditure",
          "property_id": "00002"
        }
      ],
      "attributes": [
        {
          "name": "alcohol_tax",
          "attribute_id": "00011"
        },
        {
          "name": "alcohol_expenditure",
          "attribute_id": "00022"
        }
      ]
    }
  ]
}

Выходной JSON

[
    {
        "name": "Alcohol",
        "collection_id": 123,
        "details": [{
                "property_name": "Tax",
                "property_id": "00001",
                "attribute_id": "00011"
            },
            {
                "property_name": "Expenditure",
                "property_id": "00002",
                "attribute_id": "00022"
            }
        ]
    }
]

IЯ попробовал несколько способов объединить массивы, используя несколько правил, но без особого успеха.

Одно из правил

[{
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "name": "&1.name",
          "collection_id": "&1.collection_id",
          "attributes": {
            "*": {
              "attribute_id": "&1.attribute_id[]"
            }
          },
          "properties": {
            "*": {
              "name": "&1.myname[]",
              "property_id": "&1.property_id[]"
            }
          }
        }
      }
    }
  }]

- добавление всех атрибутов и свойств ко всем коллекциям.Я не знаю, почему это происходит, так как я думал, что & 1.property_id [] будет добавлять в массив только элементы из этой конкретной коллекции, а не все коллекции.Любая помощь / подсказки о том, почему это происходит, была бы очень признательна.

1 Ответ

0 голосов
/ 20 февраля 2019

См. Решение ниже:

  • [0] создает массив оберток
  • [&1] использует положение соответствующих массивов, поэтому результаты объединяются в details важныйчасть заключает в квадратные скобки, поэтому она рассматривается как массив, а не как литерал.
[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "name": "[0].name",
          "collection_id": "[0].collection_id",
          "attributes": {
            "*": {
              "attribute_id": "[0].details.[&1].attribute_id"
            }
          },
          "properties": {
            "*": {
              "name": "[0].details.[&1].name",
              "property_id": "[0].details.[&1].property_id"
            }
          }
        }
      }
    }
  }
]

Создает следующее:

[
  {
    "name": "Alcohol",
    "collection_id": 123,
    "details": [
      {
        "attribute_id": "00011",
        "name": "Tax",
        "property_id": "00001"
      },
      {
        "attribute_id": "00022",
        "name": "Expenditure",
        "property_id": "00002"
      }
    ]
  }
]
...