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

如何在Node服务端将xml.gz格式文件转换为JSON格式

完全可以在Node服务端实现xml.gz格式到JSON的转换,整体流程分为拉取压缩流、gzip解压、XML转JSON三个核心环节,以下是可直接落地的实现方案:

1. 依赖准备

你需要用到三个工具,其中zlib是Node内置模块无需额外安装:

  • axios:发起GET请求,原生支持流式响应处理
  • zlib:Node内置的gzip解压模块
  • xml2js:生态内广泛使用的XML转JSON工具,兼容性好

安装命令:
npm install axios xml2js

2. 完整实现代码

const axios = require('axios');
const zlib = require('zlib');
const { parseString } = require('xml2js');
const { promisify } = require('util');
// 将xml2js的回调式API转为Promise风格,方便异步调用
const parseXml = promisify(parseString);

async function xmlGzToJson(apiUrl) {
  try {
    // 1. 发起请求获取二进制流,声明支持gzip压缩
    const res = await axios.get(apiUrl, {
      responseType: 'stream',
      headers: { 'Accept-Encoding': 'gzip' }
    });

    // 2. 管道连接gzip解压流,处理压缩内容
    const gunzipStream = zlib.createGunzip();
    const xmlDataStream = res.data.pipe(gunzipStream);

    // 拼接解压后的完整XML内容
    let xmlContent = '';
    for await (const chunk of xmlDataStream) {
      xmlContent += chunk.toString('utf8');
    }

    // 3. XML转JSON,可根据实际需求调整转换配置
    const jsonResult = await parseXml(xmlContent, {
      trim: true, // 自动去掉标签内容前后的空格
      explicitArray: false, // 单个子节点不强制包裹为数组
      explicitRoot: false, // 不保留XML根节点的外层包装
      mergeAttrs: true // 合并XML标签属性到节点值中
    });

    return jsonResult;
  } catch (err) {
    console.error('处理失败:', err);
    throw err;
  }
}

// 调用示例
// xmlGzToJson('你的目标接口地址').then(data => console.log(data))

3. 优化说明

  • 如果接口返回的数据量极大,不想一次性加载到内存,可以替换xml2js为sax这类流式XML解析库,边解压边解析边处理,内存占用会降低90%以上
  • 若解压后出现乱码,可调整chunk.toString的编码参数,比如改为gbk,和接口返回的内容编码对齐即可
  • 转换后的JSON结构可以通过调整parseXml的配置参数修改,适配不同的XML返回格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:06:01