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

如何从JSON不同数据类型结构中获取统一目标字符串?

统一解析两种结构的cbc:ID字段

核心思路是判断cbc:ID的类型:如果是对象则取#text属性,是字符串则直接使用。以下是几种常用语言/工具的实现:

JavaScript 实现

const getPayeeId = (data) => {
  const idField = data?.['cac:PayeeFinancialAccount']?.['cbc:ID'];
  return typeof idField === 'object' ? idField?.['#text'] : idField;
};

// 测试用例
const data1 = {
  "cac:PayeeFinancialAccount": {
    "cbc:ID": {
      "@schemeID": "IBAN",
      "#text": "220-115524-04"
    }
  }
};
const data2 = {
  "cac:PayeeFinancialAccount": {
    "cbc:ID": "220-115524-04"
  }
};

console.log(getPayeeId(data1)); // 输出 "220-115524-04"
console.log(getPayeeId(data2)); // 输出 "220-115524-04"

Python 实现

def get_payee_id(data):
    payee_account = data.get('cac:PayeeFinancialAccount', {})
    id_field = payee_account.get('cbc:ID')
    return id_field.get('#text') if isinstance(id_field, dict) else id_field

// 测试用例
data1 = {
    "cac:PayeeFinancialAccount": {
        "cbc:ID": {
            "@schemeID": "IBAN",
            "#text": "220-115524-04"
        }
    }
}
data2 = {
    "cac:PayeeFinancialAccount": {
        "cbc:ID": "220-115524-04"
    }
}

print(get_payee_id(data1))  # 输出 "220-115524-04"
print(get_payee_id(data2))  # 输出 "220-115524-04"

JQ 命令行工具实现

如果用JQ处理JSON数据,一行命令即可完成转换:

.cac:PayeeFinancialAccount.cbc:ID | if type == "object" then .#text else . end

补充说明

你之前尝试的oneOf是JSON Schema的验证关键字,仅用于校验数据是否符合指定结构之一,不具备数据转换能力。要实现两种结构输出一致,必须通过类型判断+针对性取值的逻辑来处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:29:52