Элементы массива фильтра JOLT, основанные на существовании ключевого поля - PullRequest
0 голосов
/ 03 апреля 2020

Можно ли фильтровать элементы массива по наличию поля.

Мой вход JSON такой, как показано ниже:

{
  "payload": {
    "logical": {
      "schemas": [
        {
          "name": "myschema",
          "tables": [
            {
              "name": "myname",
              "alias": "temp_alias",
              "keys": [
                {
                  "name": "value1",
                  "key": "key1",
                  "match": "match_val"
                },
                {
                  "name": "value1",
                  "key": "key2",
                  "match": "match_val"
                },
                {
                  "name": "value1",
                  "key": "key3"
                },
                {
                  "name": "value1",
                  "key": "key4"
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

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

{
  "payload": {
    "logical": {
      "schemas": [
        {
          "tables": [
            {
              "name": "myname",
              "alias": "temp_alias",
              "keys": {
                "name": "value1",
                "match": "match_val",
                "key": [
                  "key1",
                  "key2"
                ]
              }
            }
          ]
        }
      ]
    }
  }
}

Если в элементе «keys» есть поле «match», то мы возьмем значение «key» из этого элемента и поместим в выходной массив «key».

Я использую это spe c файл, но не получается требуемый вывод. Может кто-нибудь подсказать, пожалуйста, как это сделать?

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "payload": {
        "*": "&",
        "logical": {
          "schemas": {
            "*": {
              "tables": {
                "*": {
                  "name": "payload.logical.schemas[&3].tables[&1].name",
                  "alias": "payload.logical.schemas[&3].tables[&1].alias",
                  "keys": {
                    "*": {
                      "match": {
                        "match1|match2": {
                          "@2": {
                            "name": "payload.logical.schemas[&4].tables[&4].keys.name",
                            "match": "payload.logical.schemas[&4].tables[&4].keys.match",
                            "key": "payload.logical.schemas[&4].tables[&4].keys.key"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

1 Ответ

0 голосов
/ 04 апреля 2020

Я получил желаемый вывод с файлом ниже spe c:

[ { "operation": "shift", "spec": { "*": "&", "payload": { "*": "&", "logical": { "schemas": { "*": { "tables": { "*": { "name": "payload.logical.schemas[&3].tables[&1].name", "alias": "payload.logical.schemas[&3].tables[&1].alias", "keys": { "*": { "match": { "*": { "@(2,name)": "payload.logical.schemas[&7].tables[&5].keys[&3].name", "@(2,match)": "payload.logical.schemas[&7].tables[&5].keys[&3].match", "@(2,key)": "payload.logical.schemas[&7].tables[&5].keys[&3].key" } } } } } } } } } } } }, { "operation": "shift", "spec": { "*": "&", "payload": { "*": "&", "logical": { "schemas": { "*": { "tables": { "*": { "name": "payload.logical.schemas[&3].tables[&1].name", "alias": "payload.logical.schemas[&3].tables[&1].alias", "keys": { "*": { "name": "payload.logical.schemas[&5].tables[&3].keys.name", "match": "payload.logical.schemas[&5].tables[&3].keys.match", "key": "payload.logical.schemas[&5].tables[&3].keys.key" } } } } } } } } } }, { "operation": "cardinality", "spec": { "payload": { "logical": { "schemas": { "*": { "tables": { "*": { "keys": { "name": "ONE", "match": "ONE" } } } } } } } } } ]

...