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

JOLT转换问题:构建属性分组的对象数组

JOLT转换:将错误信息映射为独立的status对象

问题描述

需要将输入中的每个interfaceInvoiceLineRejections元素转换为status数组内的独立对象,包含StatusReasonCode和StatusReason字段。原JOLT Spec错误地将同类型错误合并到同一对象的数组中,不符合预期输出。

输入JSON

{"interfaceInvoiceLines": [{"LineNumber": 1,"interfaceInvoiceLineRejections": [{"RejectionDescription": "Invalid PO number","TempRejectionDescription": "Invoice line 1 - Invalid PO number"},{"RejectionDescription": "Billed quantity is below zero","TempRejectionDescription": "Invoice line 1 - Billed quantity is below zero"}]},{"LineNumber": 2,"interfaceInvoiceLineRejections": [{"RejectionDescription": "Invalid PO number","TempRejectionDescription": "Invoice line 2 - Invalid PO number"}]}]}

原JOLT Spec

[{"operation": "shift","spec": {"interfaceInvoiceLines": {"*": {"interfaceInvoiceLineRejections": {"*": {"RejectionDescription": {"Invalid PO number": {"#REF": "ApplicationResponse.DocumentResponse.Response.status[&3].StatusReasonCode","@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[&3].StatusReason"},"Billed quantity is below zero": {"#OTH": "ApplicationResponse.DocumentResponse.Response.status[&3].StatusReasonCode","@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[&3].StatusReason"}}}}}}]}]

实际输出(不符合预期)

{"ApplicationResponse": {"DocumentResponse": {"Response": {"status": [{"StatusReasonCode": ["REF","REF"],"StatusReason": ["Invoice line 1 - Invalid PO number","Invoice line 2 - Invalid PO number"]},{"StatusReasonCode": "OTH","StatusReason": "Invoice line 1 - Billed quantity is below zero"}]}}}}

预期输出

{"ApplicationResponse": {"DocumentResponse": {"Response": {"status": [{"StatusReasonCode": "REF","StatusReason": "Invoice line 1 - Invalid PO number"},{"StatusReasonCode": "OTH","StatusReason": "Invoice line 1 - Billed quantity is below zero"},{"StatusReasonCode": "REF","StatusReason": "Invoice line 2 - Invalid PO number"}]}}}}

问题分析

原Spec中使用status[&3],&3指向的是interfaceInvoiceLines的层级索引,导致同一行(LineNumber)下的相同类型错误被合并到同一个status对象中,最终字段值变成数组。我们需要为每个interfaceInvoiceLineRejections元素生成独立的status对象,避免合并。

修正后的JOLT Spec

方案1:用唯一索引标识每个错误

[
  {
    "operation": "shift",
    "spec": {
      "interfaceInvoiceLines": {
        "*": {
          "interfaceInvoiceLineRejections": {
            "*": {
              "RejectionDescription": {
                "Invalid PO number": {
                  "#REF": "ApplicationResponse.DocumentResponse.Response.status[&3_&1].StatusReasonCode",
                  "@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[&3_&1].StatusReason"
                },
                "Billed quantity is below zero": {
                  "#OTH": "ApplicationResponse.DocumentResponse.Response.status[&3_&1].StatusReasonCode",
                  "@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[&3_&1].StatusReason"
                }
              }
            }
          }
        }
      }
    }
  }
]
  • &3对应interfaceInvoiceLines的元素索引,&1对应interfaceInvoiceLineRejections的元素索引,两者组合确保每个错误对应唯一的数组位置,避免合并。

方案2:自动追加数组元素

[
  {
    "operation": "shift",
    "spec": {
      "interfaceInvoiceLines": {
        "*": {
          "interfaceInvoiceLineRejections": {
            "*": {
              "RejectionDescription": {
                "Invalid PO number": {
                  "#REF": "ApplicationResponse.DocumentResponse.Response.status[].StatusReasonCode",
                  "@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[#2].StatusReason"
                },
                "Billed quantity is below zero": {
                  "#OTH": "ApplicationResponse.DocumentResponse.Response.status[].StatusReasonCode",
                  "@(2,TempRejectionDescription)": "ApplicationResponse.DocumentResponse.Response.status[#2].StatusReason"
                }
              }
            }
          }
        }
      }
    }
  }
]
  • status[]自动为每个错误创建新的数组元素,#2引用当前数组的上一个位置,确保StatusReasonCode和StatusReason属于同一个对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:10:08