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

嵌套数组结构的Jolt Spec转换优化问题(续)

Jolt嵌套数组展开修正方案

问题场景

现有JSON数据:

{"Product": [{"id": 123,"name": "foo","ProductCharge": [{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"feeRate": [{"bandNumber": 1,"rate": 0.6},{"bandNumber": 2,"rate": 1.7}]},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"feeRate": [{"bandNumber": 1,"rate": 0.75},{"bandNumber": 2,"rate": -0.55}]}]}]}

需要将每个ProductCharge对象与其内部的feeRate数组元素展开,每个feeRate对应一个包含原ProductCharge字段的新对象,期望输出:

{"Product": [{"id": 123,"name": "foo","ProductCharge": [{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"bandNumber": 1,"rate": 0.6},{"aboveAmount": 0,"chargeType": "ABC","chargeValueType": "PERCENT","frequency": 1,"bandNumber": 2,"rate": 1.7},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"bandNumber": 1,"rate": 0.75},{"aboveAmount": 0,"chargeType": "DEF","chargeValueType": "DECIMAL","frequency": 2,"bandNumber": 2,"rate": -0.55}]}]}

原Jolt Spec存在问题:aboveAmount、chargeType等字段仅取自第一个ProductCharge对象,无法正确关联对应feeRate所属的ProductCharge字段值。

原错误Spec:

[{"operation": "shift","spec": {"Product": {"*": {"*": "&2.&","ProductCharge": {"0": {"*": "&4.&2.Others.&","feeRate": {"*": {"*": "&6.&4.&2.&3_&1.&"}}},"*": {"feeRate": {"*": {"*": "&6.&4.&2.&3_&1.&"}}}}}}},{"operation": "shift","spec": {"Product": {"*": "&1[0].&","ProductCharge": {"feeRate": {"*": {"@": "&4[0].&3.[#2]","@2,Others": {"*": "&5[0].&4.[#3].&"}}}}}}]

修正后的Jolt Spec

[
  {
    "operation": "shift",
    "spec": {
      "Product": {
        "*": {
          "*": "&2.&1.&",
          "ProductCharge": {
            "*": {
              "feeRate": {
                "*": {
                  "@2,aboveAmount": "&6.&5.&3.[#2].aboveAmount",
                  "@2,chargeType": "&6.&5.&3.[#2].chargeType",
                  "@2,chargeValueType": "&6.&5.&3.[#2].chargeValueType",
                  "@2,frequency": "&6.&5.&3.[#2].frequency",
                  "*": "&6.&5.&3.[#2].&"
                }
              }
            }
          }
        }
      }
    }
  }
]

方案说明

  1. 单次shift操作完成所有映射:
    • 用&6.&5.&3.[#2]定位到最终的Product[0].ProductCharge数组位置,#2表示当前feeRate元素的索引,确保每个feeRate对应独立的数组项。
    • 通过@2,字段名向上两层(当前ProductCharge对象)获取对应字段值,保证每个展开的对象都关联自身所属的ProductCharge字段,彻底解决原方案中字段关联错误的问题。

内容的提问来源于stack exchange,提问作者Mahesh Gopalan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:21:03