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

基于ContactType字段值的Jolt JSON转换实现求助

用Jolt根据ContactType值转换JSON结构

输入JSON

{
  "root": {
    "entities": [
      {
        "fields": [
          {
            "name": "ContactType",
            "value": "Company"
          },
          {
            "name": "HandlerName",
            "value": "XYZ"
          },
          {
            "name": "Reference",
            "value": "123-4443"
          },
          {
            "entities": [
              {
                "parent": {
                  "fieldName": "DefendantAddress"
                },
                "fields": [
                  {
                    "name": "Address",
                    "value": "1662369113138 Somewhere Street"
                  },
                  {
                    "name": "PostalCode",
                    "value": "XXXXX"
                  }
                ]
              }
            ],
            "name": "DefendantAddress"
          }
        ]
      }
    ]
  }
}

转换需求

根据ContactType字段的值生成不同结构的输出:

  • 当ContactType为Company时,输出:
{
  "HandlerName": "XYZ",
  "reference": "123-4443",
  "companyDetails": {
    "address": "1662369113138 Somewhere Street",
    "postalCode": "XXXXX"
  }
}
  • 当ContactType为Person时,输出:
{
  "HandlerName": "XYZ",
  "reference": "123-4443",
  "personDetails": {
    "address": "1662369113138 Somewhere Street",
    "postalCode": "XXXXX"
  }
}

现有Jolt Spec(待完善)

目前已能判断ContactType的值,但无法导航到子实体获取地址信息,现有Spec如下:

[
  {
    "operation": "shift",
    "spec": {
      "root": {
        "entities": {
          "*": {
            "fields": {
              "*": {
                "name": {
                  "HandlerName": {
                    "@(2,value)": "handlerName"
                  },
                  "Reference": {
                    "@(2,value)": "reference"
                  },
                  "ContactType": {
                    "@(2,value)": {
                      "Company": {
                        ?????
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

完整解决方案

要导航到子实体的地址信息,需要使用Jolt的相对路径引用(@符号)定位到DefendantAddress下的子实体字段,同时通过动态键名实现根据ContactType生成不同的详情节点名。

完整的Jolt Spec如下:

[
  {
    "operation": "shift",
    "spec": {
      "root": {
        "entities": {
          "*": {
            "fields": {
              // 提取HandlerName和Reference
              "*": {
                "name": {
                  "HandlerName": {
                    "@(2,value)": "HandlerName"
                  },
                  "Reference": {
                    "@(2,value)": "reference"
                  }
                }
              },
              // 定位到DefendantAddress的子实体字段
              "*": {
                "name": {
                  "DefendantAddress": {
                    "@(2,entities)": {
                      "*": {
                        "fields": {
                          "*": {
                            "name": {
                              "Address": {
                                "@(2,value)": "@(6,fields[0].value)Details.address"
                              },
                              "PostalCode": {
                                "@(2,value)": "@(6,fields[0].value)Details.postalCode"
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  // 转换键名大小写(CompanyDetails -> companyDetails)
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "companyDetails": "=toLower(@(1,CompanyDetails))",
      "personDetails": "=toLower(@(1,PersonDetails))"
    }
  },
  // 清理临时生成的大写键名
  {
    "operation": "remove",
    "spec": {
      "CompanyDetails": "",
      "PersonDetails": ""
    }
  }
]

关键逻辑说明

  1. 动态键名生成:@(6,fields[0].value)表示向上回溯6层,获取fields数组第一个元素(ContactType字段)的value值,以此生成CompanyDetails或PersonDetails临时键名。
  2. 子实体导航:通过@(2,entities)定位到DefendantAddress下的子实体数组,再逐层提取Address和PostalCode的值。
  3. 分步处理:先提取所有字段生成临时大写键,再转换为目标小写键,最后清理临时键保证输出结构正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:24:25