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

Python对象列表能否编码后供zlib.compress压缩并在Angular解压?

问题答复

直接编码可行性说明

这类JSON结构的对象列表不能直接编码为UTF-8传入zlib.compress。原因是Python中的列表属于内存对象,UTF-8编码仅支持对字符串类型的内容做转换,直接对列表对象调用encode方法会抛出类型错误。

完整实现方案

Python侧(压缩端)

操作流程如下:

  • 先将Python对象列表序列化为标准JSON字符串,使用json.dumps()方法即可,你给出的示例结构完全符合JSON规范,序列化不会有兼容性问题
  • 将JSON字符串编码为UTF-8字节流,调用字符串的encode('utf-8')方法
  • 传入zlib.compress()完成压缩,压缩后如果需要在前后端之间传输,建议将压缩后的字节流编码为Base64字符串,避免传输过程中二进制数据损坏

示例代码:

import zlib
import json
import base64

# 待压缩的对象列表
data_list = [{"name":"value1","y":0.0}, {"name":"value2","y":1.0}]
# 1. 序列化为JSON字符串
json_str = json.dumps(data_list)
# 2. 编码为UTF-8字节流
utf8_bytes = json_str.encode('utf-8')
# 3. zlib压缩
compressed_bytes = zlib.compress(utf8_bytes)
# 4. 转Base64字符串方便传输
compressed_base64 = base64.b64encode(compressed_bytes).decode('ascii')

Angular侧(解压端)

操作流程如下:

  • 拿到传输过来的Base64编码的压缩内容,先解码为二进制字节流
  • 调用zlib兼容的JS解压库pako完成解压,这是目前前端最常用的zlib格式解压实现
  • 将解压后的字节流转为UTF-8字符串
  • 调用JSON.parse()还原为原始的对象列表

示例代码:
首先安装依赖:npm install pako @types/pako(TS项目需要同步安装类型定义包)
解压逻辑:

import * as pako from 'pako';

// 后端返回的Base64格式压缩内容
const compressedBase64 = '替换为实际拿到的压缩字符串';
// 1. Base64转二进制字节流
const binaryString = atob(compressedBase64);
const compressedBytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
  compressedBytes[i] = binaryString.charCodeAt(i);
}
// 2. zlib格式解压
const decompressedBytes = pako.inflate(compressedBytes);
// 3. 转UTF-8字符串
const jsonStr = new TextDecoder('utf-8').decode(decompressedBytes);
// 4. 还原为原始对象列表
const originData = JSON.parse(jsonStr);

注意事项

  • 如果对象列表包含非ASCII字符(比如中文),只要序列化和编码阶段统一使用UTF-8,不会出现乱码问题
  • 数据量特别大的场景下,可以在Python侧调整zlib的压缩等级(zlib.compress的第二个参数支持传入1-9,数字越大压缩比越高、压缩速度越慢),按需平衡性能和压缩效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:36:07