You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双层嵌套数组结构的JOLT Shift转换问题求助

JOLT Shift 解决双层嵌套数组的员工与地址关联问题

问题需求

需使用JOLT Shift将包含双层嵌套数组的输入JSON转换为指定格式输出,现有Spec无法正确关联员工与其对应地址:员工1需关联地址1、2,员工2需关联地址3、4、5。

输入JSON

{
  "P": {
    "type": "manager",
    "metadata": {
      "id": "mgr1"
    },
    "properties": {
      "firstName": "managerFirstName",
      "lastName": "managerLastName",
      "employmentId": "employmentId"
    },
    "S": [
      {
        "type": "employee",
        "metadata": {
          "id": "empl1"
        },
        "properties": {
          "last": "employeeOneLastName",
          "first": "employeeOneFirstName"
        },
        "S": [
          {
            "type": "address",
            "metadata": {
              "identifier": "addr1"
            },
            "properties": {
              "city": "addressOneCity",
              "street": "addressOneStreet"
            }
          },
          {
            "type": "address",
            "metadata": {
              "id": "addr2"
            },
            "properties": {
              "city": "addressTwoCity",
              "street": "addressTwoStreet"
            }
          }
        ]
      },
      {
        "type": "employee",
        "metadata": {
          "id": "empl2"
        },
        "properties": {
          "last": "employeeTwoLastName",
          "first": "employeeTwoFirstName"
        },
        "S": [
          {
            "type": "address",
            "metadata": {
              "id": "addr3"
            },
            "properties": {
              "city": "addressThreeCity",
              "street": "addressThreeStreet"
            }
          },
          {
            "type": "address",
            "metadata": {
              "id": "addr4"
            },
            "properties": {
              "city": "addressFourCity",
              "street": "addressFourStreet"
            }
          },
          {
            "type": "address",
            "metadata": {
              "id": "addr5"
            },
            "properties": {
              "city": "addressFiveCity",
              "street": "addressFiveStreet"
            }
          }
        ]
      },
      {
        "type": "officeinfo",
        "metadata": {
          "id": "office1"
        },
        "properties": {
          "country": "myCountry",
          "city": "myCity",
          "employmentId": "employmentId"
        }
      }
    ]
  }
}

期望输出JSON

{
  "manager": {
    "type": "manager",
    "firstName": "managerFirstName",
    "lastName": "managerLastName",
    "employmentId": "employmentId",
    "employee": [
      {
        "type": "employee",
        "lastName": "employeeOneLastName",
        "firstName": "employeeOneFirstName",
        "address": [
          {
            "type": "address",
            "city": "addressOneCity",
            "street": "addressOneStreet"
          },
          {
            "type": "address",
            "city": "addressTwoCity",
            "street": "addressTwoStreet"
          }
        ]
      },
      {
        "address": [
          {
            "city": "addressThreeCity",
            "street": "addressThreeStreet",
            "type": "address"
          },
          {
            "type": "address",
            "city": "addressFourCity",
            "street": "addressFourStreet"
          },
          {
            "city": "addressFiveCity",
            "street": "addressFiveStreet",
            "type": "address"
          }
        ],
        "type": "employee",
        "lastName": "employeeTwoLastName",
        "firstName": "employeeTwoFirstName"
      }
    ],
    "office": {
      "type": "officeinfo",
      "country": "myCountry",
      "city": "myCity",
      "employmentId": "employmentId"
    }
  }
}

原有错误Spec

[
  {
    "operation": "shift",
    "spec": {
      "P": {
        "type": "manager.&",
        "properties": {
          "firstName": "manager.firstName",
          "lastName": "manager.lastName",
          "employmentId": "manager.employmentId"
        },
        "S": {
          "*": {
            "type": {
              "officeinfo": {
                "$": "manager.office.type"
              },
              "employee": {
                "$": "manager.employee[&3].type"
              }
            },
            "*": {
              "last": "manager.employee[&2].lastName",
              "first": "manager.employee[&2].firstName",
              "country": "manager.office.country",
              "city": "manager.office.city",
              "employmentId": "manager.office.employmentId"
            },
            "S": {
              "*": {
                "type": "manager.employee[&3].address[&1].type",
                "*": {
                  "city": "manager.employee[&2].address[&4].city",
                  "street": "manager.employee[&2].address[&4].street"
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  }
]

修正后的JOLT Spec

[
  {
    "operation": "shift",
    "spec": {
      "P": {
        "type": "manager.type",
        "properties": {
          "*": "manager.&"
        },
        "S": {
          "*": {
            "type": {
              "employee": {
                "$": "manager.employee[&2].type"
              },
              "officeinfo": {
                "$": "manager.office.type"
              }
            },
            "properties": {
              "last": "manager.employee[&2].lastName",
              "first": "manager.employee[&2].firstName",
              "country": "manager.office.country",
              "city": "manager.office.city",
              "employmentId": "manager.office.employmentId"
            },
            "S": {
              "*": {
                "type": "manager.employee[&3].address[&1].type",
                "properties": {
                  "*": "manager.employee[&3].address[&1].&"
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  }
]

修正说明

  1. 层级索引修正:地址部分的层级引用调整为&3对应员工数组索引,&1对应地址数组索引,确保每个员工的地址正确关联。
  2. 属性映射优化:明确针对properties节点处理字段,避免通配符误匹配非目标属性;manager的属性直接用*通配符映射,简化配置。
  3. 结构清晰化:将员工、办公室、地址的映射逻辑拆分,避免交叉干扰,确保每个类型的字段都映射到正确位置。

内容的提问来源于stack exchange,提问作者Chau Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:05:17