【问题标题】:JOLT: Copy key value and filter arrayJOLT:复制键值和过滤器数组
【发布时间】:2021-10-29 16:32:43
【问题描述】:

我正在尝试过滤掉数组中不满足给定数据条件的一些对象。所有包含 "SAL_EMP""MAJ_EMP"idType 都将被移除并仅返回剩余的对象。但目前没有将“过滤”的对象返回到它自己的父对象中。

如何修改我的规范以达到预期的效果?


输入数据

[
  {
    "type": "front-desk",
    "employeeIdDetails": [
      {
        "id": "900",
        "idType": "HR_EMP"
      },
      {
        "id": "100",
        "idType": "SAL_EMP"
      },
      {
        "id": "100",
        "idType": "MAJ_EMP"
      },
      {
        "id": "120",
        "idType": "COL_EMP"
      }
    ]
  },
  {
    "type": "backend",
    "employeeIdDetails": [
      {
        "id": "920",
        "idType": "HR_EMP"
      },
      {
        "id": "600",
        "idType": "SAL_EMP"
      },
      {
        "id": "160",
        "idType": "COL_EMP"
      },
      {
        "id": "400",
        "idType": "MAJ_EMP"
      }
    ]
  },
  {
    "type": "middle-end",
    "employeeIdDetails": [
      {
        "id": "220",
        "idType": "SAL_EMP"
      },
      {
        "id": "630",
        "idType": "SAL_EMP"
      },
      {
        "id": "460",
        "idType": "SAL_EMP"
      }
    ]
  }
]


所需数据

[
  {
    "type": "front-desk",
    "employeeIdDetails": [
      {
        "id": "900",
        "idType": "HR_EMP"
      },
      {
        "id": "120",
        "idType": "COL_EMP"
      }
    ]
  },
  {
    "type": "backend",
    "employeeIdDetails": [
      {
        "id": "920",
        "idType": "HR_EMP"
      },
      {
        "id": "160",
        "idType": "COL_EMP"
      }
    ]
  },
  {
    "type": "middle-end",
    "employeeIdDetails": [
    ]
  }
]

我目前的 Jolt 规格:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "type": {
          "*": {
            "@(2,employeeIdDetails)": {
              "*": {
                "idType": {
                  "HR_EMP": {
                    "@2": "[]"
                  },
                  "COL_EMP": {
                    "@2": "[]"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id",
        "idType": "[&1].idType"
      }
    }
  }
]

返回结果为:

[
  {
    "id": "900",
    "idType": "HR_EMP"
  },
  {
    "id": "120",
    "idType": "COL_EMP"
  },
  {
    "id": "920",
    "idType": "HR_EMP"
  },
  {
    "id": "160",
    "idType": "COL_EMP"
  }
]

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    一个选项是遍历 employeeIdDetails 数组,以应用条件逻辑,同时将它们与具有键 type 的其他元素组合为

    [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "type": "@(1,type).&",
            "employeeIdDetails": {
              "*": {
                "idType": {
                  "SAL_EMP": {
                    "@2": "[]"
                  },
                  "MAJ_EMP": {
                    "@2": "[]"
                  },
                  "*": {
                    "@2": "@(5,type).&4"
                  }
                }
              }
            }
          }
        }
      },
      {
        "operation": "shift",
        "spec": {
          "*": ""
        }
      }
    ]
    

    在命名为 type 元素值的公共键下,然后在下一级转换中去掉这些辅助键。

    【讨论】:

    • 谢谢。它可以工作,但在规范中有一些硬编码。我一直在寻找更灵活的规范,可以让我向数据中添加额外的键值。
    • 不客气@AlexDonovan,你的情况比我的好。
    【解决方案2】:

    设法从一些在线示例中找出规格。

    [
      {
        "operation": "shift",
        "spec": {
          "*": { // item array
            "*": "[&1].&",
            "employeeIdDetails": {
              "*": { // fixes array
                "idType": {
                  "HR_EMP|COL_EMP": { // only match the thing you want
                    "@2": "[&5].employeeIdDetails[]"
                  }
                }
              }
            }
          }
        }
      }
    ]
    
    

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多