Node.js项目:如何将对象数组转XML?json2xml工具异常问题
Node.js 使用 json2xml 转换对象数组为XML时,生成独立标签的解决方案
问题根源
你的原始JSON数据存在冗余嵌套层级:agents字段是仅含单个对象的数组,该对象内部又嵌套了agent数组。json2xml解析时会将外层数组映射为<agents>标签,随后把内层agent数组的所有属性直接合并到同一个<agent>标签下,导致所有agent数据堆叠在一起。
解决步骤
1. 预处理JSON数据,调整结构
先移除冗余的嵌套层级,让agents直接指向agent对象的数组,supervisors同理:
const json2xml = require('json2xml'); // 原始JSON数据 const originalData = { "refURL": "/unifiedconfig/config/agentteam/5022", "changeStamp": 12, "agentCount": 7, "description": "Cumulus Outbound Team", "name": "CumulusOutbound", "peripheral": { "id": 5000, "name": "CUCM_PG_1" }, "peripheralId": 5000, "supervisorCount": 1, "agents": [{ "agent": [{ "refURL": "/unifiedconfig/config/agent/5197", "agentId": "1085", "firstName": "Owen", "lastName": "Harvey", "userName": "oharvey" }, { "refURL": "/unifiedconfig/config/agent/5201", "agentId": "1320", "firstName": "Bruce", "lastName": "Wayne", "userName": "bwayne" }] }], "supervisors": [{ "supervisor": [{ "refURL": "/unifiedconfig/config/agent/5174", "agentId": "1082", "firstName": "Rick", "lastName": "Barrows", "userName": "rbarrows@dcloud.cisco.com" }] }] }; // 预处理:移除冗余嵌套层级 const processedData = { agentTeam: { ...originalData, // 将agents从[{agent: [...]}]改为直接的agent数组 agents: originalData.agents[0].agent, // 同理处理supervisors supervisors: originalData.supervisors[0].supervisor } };
2. 使用json2xml转换并配置格式
通过配置prettyPrint和缩进参数,保证生成的XML格式与期望一致:
const xmlOutput = json2xml(processedData, { prettyPrint: true, indent: ' ', // 匹配期望的3空格缩进 header: false // 不需要XML声明头 }); console.log(xmlOutput);
效果验证
转换后的XML会生成独立的<agent>标签,每个标签包含对应agent的属性,完全符合你期望的格式:
<agentTeam> <refURL>/unifiedconfig/config/agentteam/5022</refURL> <changeStamp>12</changeStamp> <agentCount>7</agentCount> <description>Cumulus Outbound Team</description> <name>CumulusOutbound</name> <peripheral> <id>5000</id> <name>CUCM_PG_1</name> </peripheral> <peripheralId>5000</peripheralId> <supervisorCount>1</supervisorCount> <agents> <agent> <refURL>/unifiedconfig/config/agent/5197</refURL> <agentId>1085</agentId> <firstName>Owen</firstName> <lastName>Harvey</lastName> <userName>oharvey</userName> </agent> <agent> <refURL>/unifiedconfig/config/agent/5201</refURL> <agentId>1320</agentId> <firstName>Bruce</firstName> <lastName>Wayne</lastName> <userName>bwayne</userName> </agent> </agents> <supervisors> <supervisor> <refURL>/unifiedconfig/config/agent/5174</refURL> <agentId>1082</agentId> <firstName>Rick</firstName> <lastName>Barrows</lastName> <userName>rbarrows@dcloud.cisco.com</userName> </supervisor> </supervisors> </agentTeam>
内容的提问来源于stack exchange,提问作者Ganesh Putta
相关产品推荐
相关产品推荐

