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

如何在Jolt转换的if条件中添加for循环?

Jolt转换:条件判断结合循环实现需求

输入JSON

[{"sports": {"percent": "10%","feeType": [{"discount": 12345,"sport_fee_type": "Discounted fee","fee_details": [{"total": 1117.3,"sports_catagory": "Cricket"},{"total": 6187.79,"sports_catagory": "Football"}]},{"sport_fee_type": "Recurring fee","fee_details": [{"total": 1117.3,"sports_catagory": "Cricket sport"},{"total": 6187.79,"sports_catagory": "Football"}]},{"sport_fee_type": "Non Recurring fee","fee_details": [{"total": 1117.3,"sports_catagory": "Cricket"},{"total": 6187.79,"sports_catagory": "football"}]}]}}]

现有转换规则(Specs)

[{"operation": "shift","spec": {"*": {"@sports": {"@percent": "additionalInfo[#1].value","#percent": "additionalInfo[#1].property","@feeType": {"*": {"sport_fee_type": {"Discounted fee": {"#discountAmount": "additionalInfo[&3].property","@2,discount": ["additionalInfo[&3].value", "discountedPrice"],"@2,fee_details": {"*": {"total": ["billing.feeSummary[&5].sportsCategories[&1].amount"],"sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"}},"#DISCOUNTED": "billing.feeSummary[#2].feeType"},"Non Recurring fee": {"@2,fee_details": {"*": {"total": "billing.feeSummary[&5].sportsCategories[&1].amount","sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"}},"#NON_RECURRING": "billing.feeSummary[#4].feeType"},"Recurring fee": {"@2,fee_details": {"*": {"total": "billing.feeSummary[&5].sportsCategories[&1].amount","sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"}},"#RECURRING": "billing.feeSummary[#4].feeType"}}}}}}},{"operation": "modify-overwrite-beta","spec": {"billing": {"feeSummary": {"*": {"sportsCategories": {"*": {"sportType": "=toUpper"}}}}}}},{"operation": "modify-overwrite-beta","spec": {"billing": {"feeSummary": {"*": {"sportsCategories": {"*": {"sportType": "=split(' ',@(1,&))"}}}}}}},{"operation": "modify-overwrite-beta","spec": {"billing": {"feeSummary": {"*": {"sportsCategories": {"*": {"sportType": "=join('_',@(1,&))"}}}}}}]

期望输出

{"additionalInfo": [{"value": "10%","property": "percent"},{"property": "discountAmount","value": 12345}],"discountedPrice": 12345,"billing": {"feeSummary": [{"sportsCategories": [{"amount": 1117.3,"sportType": "CRICKET"},{"amount": 6187.79,"sportType": "FOOTBALL"}],"feeType": "DISCOUNTED"},{"sportsCategories": [{"amount": 1117.3,"sportType": "CRICKET_SPORT"},{"amount": 6187.79,"sportType": "FOOTBALL"}],"feeType": "RECURRING"},{"sportsCategories": [{"amount": 1117.3,"sportType": "CRICKET"},{"amount": 6187.79,"sportType": "FOOTBALL"}],"feeType": "NON_RECURRING"}]}}

优化后的Jolt转换规则(结合条件与循环)

Jolt中没有显式的for语法,通过*通配符实现数组/对象的遍历循环,同时搭配值匹配实现条件分支。以下是简化且逻辑清晰的转换规则:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "sports": {
          "percent": {
            "@": "additionalInfo[0].value",
            "#percent": "additionalInfo[0].property"
          },
          "feeType": {
            "*": {
              "sport_fee_type": {
                "Discounted fee": {
                  "#DISCOUNTED": "billing.feeSummary[&3].feeType",
                  "@2,discount": ["additionalInfo[1].value", "discountedPrice"],
                  "#discountAmount": "additionalInfo[1].property",
                  "@2,fee_details": {
                    "*": {
                      "total": "billing.feeSummary[&5].sportsCategories[&1].amount",
                      "sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"
                    }
                  }
                },
                "Recurring fee": {
                  "#RECURRING": "billing.feeSummary[&3].feeType",
                  "@2,fee_details": {
                    "*": {
                      "total": "billing.feeSummary[&5].sportsCategories[&1].amount",
                      "sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"
                    }
                  }
                },
                "Non Recurring fee": {
                  "#NON_RECURRING": "billing.feeSummary[&3].feeType",
                  "@2,fee_details": {
                    "*": {
                      "total": "billing.feeSummary[&5].sportsCategories[&1].amount",
                      "sports_catagory": "billing.feeSummary[&5].sportsCategories[&1].sportType"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "billing": {
        "feeSummary": {
          "*": {
            "sportsCategories": {
              "*": {
                "sportType": "=join('_',=split(' ',=toUpper(@(1,sportType))))"
              }
            }
          }
        }
      }
    }
  }
]

核心逻辑说明

  1. 循环实现:使用*遍历feeType和fee_details数组,自动处理每个元素,替代显式循环语法。
  2. 条件分支:通过匹配sport_fee_type的具体值,实现不同费用类型的差异化转换逻辑。
  3. 路径索引引用:用&数字引用上级路径的数组索引,确保循环中每个元素的输出位置准确对应。
  4. 简化数据处理:将多个modify步骤合并为一个,通过嵌套函数一次性完成转大写→拆分→下划线连接的操作。

内容的提问来源于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.09 13:05:55