JOLT 根据关键字段的存在过滤数组元素

JOLT filter array elements based on existence of a key field

是否可以根据字段的存在来过滤数组元素。

我的输入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".

我正在使用这个规范文件,但没有得到所需的输出。谁能建议怎么做?

[
  {
    "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"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

我使用以下规范文件获得了所需的输出:

[ { "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" } } } } } } } } } ]