Преобразование JOLT в фильтр типа контакта на основе типа массива - PullRequest
0 голосов
/ 08 мая 2019

Как проверить условие в массиве JSON. Учитывая приведенный ниже код, мне нужно выполнить фильтрацию по типу контакта. Если тип контакта содержит «Телефон», то должен отображаться тип телефона.

{
  "entities": [
    [
      {
        "contactType": [
          "phone","email"
        ],
        "type": "111",
        "data": "111"
      },
      {
        "contactType": [
          "email"
        ],
        "type": "222",
        "data": "222"
      }
    ],
    [
      {
        "contactType": [
          "skype","phone"
        ],
        "type": "333",
        "data": "333"
      },
      {
        "contactType": [
          "email"
        ],
        "type": "444",
        "data": "444"
      }
    ]
  ]
}

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

{
  "entities": [
    {
      "type": "111",
      "data": "111"
    },
    {
      "type": "333",
      "data": "333"
    }
  ]
}

Спецификация удара

 {
    "operation": "shift",
    "spec": {
      "entities": {
        "*": {
          "*": "entities.[]"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "entities": {
        "*": {
          "contactType": {
            "*": {
              "phone": {
                "type": "entities[&1].type",
                "data": "entities[&1].data"
              }
            }
          }
        }
      }
    }
  }
]

Сначала я объединил массив массивов в один массив, который содержит как телефон, так и тип электронной почты. От типа контакта или электронной почты или телефона он должен быть отфильтрован в один массив.

1 Ответ

0 голосов
/ 09 мая 2019
[
  {
    "operation": "shift",
    "spec": {
      "entities": {
        // collect all contact type and add it in one Array
        "*": {
          "*": "entities.[]"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "entities": {
        "*": {
          "contactType": {
            // loop thru each contactType for the phone type
            "*": {
              "phone": {
                "@3": "entities[]"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "entities": {
        // removing contactType or adding type and data only
        "*": {
          "type": "entities[&1].type",
          "data": "entities[&1].data"
        }
      }
    }
  }
]
...