如何从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
相关产品推荐
相关产品推荐

