JS实现 xml 转换 JSON 格式

一、转换方法如下:

复制代码
function xmlToJson(xml) {
  const parser = new DOMParser();
  const xmlDoc = parser.parseFromString(xml, 'application/xml');
  const json = parseElement(xmlDoc.documentElement);
  return JSON.stringify(json, null, 2);
}
 
function parseElement(element) {
  let obj = {};
  if (element.nodeType === 1) { // Element
    if (element.attributes.length > 0) {
      obj['@attributes'] = {};
      for (let j = 0; j < element.attributes.length; j++) {
        let attribute = element.attributes.item(j);
        obj['@attributes'][attribute.nodeName] = attribute.nodeValue;
      }
    }
  } else if (element.nodeType === 3) { // Text
    obj = element.nodeValue;
  }
 
  if (element.hasChildNodes()) {
    for (let i = 0; i < element.childNodes.length; i++) {
      let item = element.childNodes.item(i);
      let nodeName = item.nodeName;
      if (typeof(obj[nodeName]) === 'undefined') {
        obj[nodeName] = parseElement(item);
      } else {
        if (typeof(obj[nodeName].push) === 'undefined') {
          let old = obj[nodeName];
          obj[nodeName] = [];
          obj[nodeName].push(old);
        }
        obj[nodeName].push(parseElement(item));
      }
    }
  }
  return obj;
}
复制代码

二、使用fetch请求测试如下:

复制代码
fetch('/test.xml').then(res => res.text() )
                         .then(data =>  {
                            let jsonData = JSON.parse(xmlToJson(data))['dataList']['data']
                            // console.log("before result ==>", jsonData)
                            let result = jsonData.map((element, i) => {
                              let obj = {}
                              Object.keys(element).forEach( key => {
                                obj[key] = element[key]["#text"]
                              })
                              return obj
                            });
                            console.log("result ===>", result)
                         })
    },
复制代码

 

posted @   张哲Zeo  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示