WSO2 EI中基于XML生成特定格式JSON消息的实现疑问
XML转带@键的JSON实现方案
核心实现思路
- 解析XML提取目标标签的内容
- 按规则构建JSON对象:标签存在则直接映射值;不存在时要么跳过该字段,要么设为
null;JSON键可直接包含@符号(JSON语法允许键使用特殊字符) - 将构建好的对象序列化为标准JSON字符串
Python 实现示例
以xml.etree.ElementTree内置库为例,无需额外安装依赖:
import xml.etree.ElementTree as ET import json # 示例XML输入 xml_content = """ <root> <tag1>sample text</tag1> <tag3>another value</tag3> </root> """ # 定义XML标签与JSON键的映射(包含带@的键) tag_key_mapping = { "tag1": "ele1", "tag2": "@ele2", "tag3": "@custom_key" } # 解析XML root_node = ET.fromstring(xml_content) # 构建JSON数据 json_result = {} for xml_tag, json_key in tag_key_mapping.items(): target_element = root_node.find(xml_tag) if target_element is not None: # 提取标签文本并去除首尾空白 json_result[json_key] = target_element.text.strip() else: # 两种可选处理方式: # 1. 不添加该字段(默认) # 2. 设为null,取消下方注释即可 # json_result[json_key] = None # 输出格式化后的JSON print(json.dumps(json_result, indent=2))
运行后输出:
{ "ele1": "sample text", "@custom_key": "another value" }
JavaScript 实现示例
使用xml2js库解析XML(需先执行npm install xml2js安装):
const xml2js = require('xml2js'); const parser = new xml2js.Parser({ explicitArray: false }); // 示例XML输入 const xmlContent = ` <root> <tag1>sample text</tag1> <tag3>another value</tag3> </root> `; parser.parseString(xmlContent, (err, parsedResult) => { if (err) throw err; const tagKeyMapping = { "tag1": "ele1", "tag2": "@ele2", "tag3": "@custom_key" }; const jsonResult = {}; for (const [xmlTag, jsonKey] of Object.entries(tagKeyMapping)) { if (parsedResult.root[xmlTag]) { jsonResult[jsonKey] = parsedResult.root[xmlTag]; } else { // 可选:添加null值,取消下方注释即可 // jsonResult[jsonKey] = null; } } console.log(JSON.stringify(jsonResult, null, 2)); });
关键注意事项
- JSON键允许包含
@等特殊字符,只要用双引号包裹就符合语法规范 - 处理不存在的XML标签时,可根据需求二选一:不生成对应JSON字段,或赋值为
null - 解析XML时建议处理文本的空白字符,避免输出多余空格
内容的提问来源于stack exchange,提问作者prime
相关产品推荐
相关产品推荐

