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

如何通过Jolt转换处理含嵌套数组的嵌套对象

Jolt规格调整:实现单明细项独立detail元素

输入数据

[
  {
    "MAIN": {
      "SCALE": "N",
      "TAX": "INV",
      "DETAIL_GROUP": [
        {
          "ORDER_GROUP": "LD6",
          "CENTRAL_TP": [
            {
              "LEG_DETAILS": [
                {
                  "DETAIL_LINE": [
                    {
                      "ORDER_LINE": "L6",
                      "DETAILS": [
                        {
                          "AMOUNT": 1,
                          "QTY": 1,
                          "REGION": "EMEA"
                        }
                      ]
                    },
                    {
                      "DETAILS": [
                        {
                          "AMOUNT": 2,
                          "QTY": 2,
                          "REGION": "EMEA"
                        }
                      ]
                    }
                  ]
                },
                {
                  "DETAIL_LINE": [
                    {
                      "DETAILS": [
                        {
                          "AMOUNT": 3,
                          "QTY": 3,
                          "REGION": "EMEA"
                        }
                      ]
                    },
                    {
                      "DETAILS": [
                        {
                          "AMOUNT": 4,
                          "QTY": 4,
                          "REGION": "EMEA"
                        }
                      ]
                    }
                  ]
                },
                {
                  "DETAIL_LINE": [
                    {
                      "DETAILS": [
                        {
                          "AMOUNT": 5,
                          "QTY": 5,
                          "REGION": "EMEA"
                        }
                      ]
                    }
                  ]
                },
                {
                  "DETAIL_LINE": [
                    {
                      "DETAILS": [
                        {
                          "AMOUNT": 6,
                          "QTY": 6,
                          "REGION": "EMEA"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  }
]

当前使用的Shift规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@MAIN": {
          "@DETAIL_GROUP": {
            "*": {
              "@ORDER_GROUP": "detail[&2].orderGrouop",
              "@CENTRAL_TP": {
                "*": {
                  "@LEG_DETAILS": {
                    "*": {
                      "@DETAIL_LINE": {
                        "*": {
                          "@ORDER_LINE": "detail[&2].orderLine",
                          "@DETAILS": {
                            "*": {
                              "@AMOUNT": "detail[&2].itemInfo.adjustment",
                              "@QTY": "detail[&2].itemInfo.quantity",
                              "REGION": {
                                "#region": "detail[&4].itemInfo.additionalInfo[0].property",
                                "@": "detail[&4].itemInfo.additionalInfo[0].value"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

当前实际输出

{
  "detail": [
    {
      "orderGrouop": "LD6",
      "orderLine": "L6",
      "itemInfo": {
        "adjustment": [
          1,
          3,
          5,
          6
        ],
        "quantity": [
          1,
          3,
          5,
          6
        ],
        "additionalInfo": [
          {
            "property": [
              "region",
              "region",
              "region",
              "region"
            ],
            "value": [
              "EMEA",
              "EMEA",
              "EMEA",
              "EMEA"
            ]
          }
        ]
      }
    },
    {
      "itemInfo": {
        "adjustment": [
          2,
          4
        ],
        "quantity": [
          2,
          4
        ],
        "additionalInfo": [
          {
            "property": [
              "region",
              "region"
            ],
            "value": [
              "EMEA",
              "EMEA"
            ]
          }
        ]
      }
    }
  ]
}

预期输出

{
  "detail": [
    {
      "orderGrouop": "LD6",
      "orderLine": "L6",
      "itemInfo": {
        "adjustment": 1,
        "quantity": 1,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    },
    {
      "orderGrouop": "LD6",
      "orderLine": "L6",
      "itemInfo": {
        "adjustment": 2,
        "quantity": 2,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    },
    {
      "orderGrouop": "LD6",
      "orderLine": "L6",
      "itemInfo": {
        "adjustment": 3,
        "quantity": 3,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    },
    {
      "itemInfo": {
        "adjustment": 4,
        "quantity": 4,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    },
    {
      "itemInfo": {
        "adjustment": 5,
        "quantity": 5,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    },
    {
      "itemInfo": {
        "adjustment": 6,
        "quantity": 6,
        "additionalInfo": [
          {
            "property": "region",
            "value": "EMEA"
          }
        ]
      }
    }
  ]
}

调整后的Jolt Shift规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "MAIN": {
          "DETAIL_GROUP": {
            "*": {
              "ORDER_GROUP": "&4.detail[&3].orderGrouop",
              "CENTRAL_TP": {
                "*": {
                  "LEG_DETAILS": {
                    "*": {
                      "DETAIL_LINE": {
                        "*": {
                          "ORDER_LINE": "&6.detail[&5].orderLine",
                          "DETAILS": {
                            "*": {
                              "AMOUNT": "&7.detail[&6].itemInfo.adjustment",
                              "QTY": "&7.detail[&6].itemInfo.quantity",
                              "REGION": {
                                "#region": "&9.detail[&8].itemInfo.additionalInfo[0].property",
                                "@": "&9.detail[&8].itemInfo.additionalInfo[0].value"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

规格说明

  1. 核心逻辑是将最内层的每个DETAILS数组元素映射为独立的detail数组项,通过&N层级引用向上获取上层的ORDER_GROUP和ORDER_LINE值,确保每个明细项继承对应上级属性。
  2. 移除原规格中多余的@引用,直接按原始JSON层级路径匹配,避免层级混乱。
  3. 每个DETAILS元素对应一个独立的detail数组索引,Jolt会自动为每个明细生成单独的数组元素,而非合并到同一元素中。
  4. 若上层节点(如ORDER_LINE)不存在,对应字段不会出现在输出的detail项中,完全匹配预期格式。

内容的提问来源于stack exchange,提问作者Prasad S Deshpande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:48:11