如何将Tornado WebSocket接收的Unicode格式JSON转为纯净Python列表?
解决Unicode格式JSON数组转Python列表的问题
嘿,你完全不用手动折腾字符串拆分来解决这个问题,Python自带的json模块就能完美搞定,而且比手动处理靠谱多了!
核心解决方案
直接使用json.loads()方法解析你的unicode字符串,它会自动处理所有引号、类型转换的细节,给你一个纯净的Python列表:
import json # 你的原始unicode格式数据 msg = u'[157,"tu","27213579-SD",229156181,1524173145,8265,0.08]' # 解析成Python列表 clean_list = json.loads(msg) print(clean_list) # 输出: [157, u'tu', u'27213579-SD', 229156181, 1524173145, 8265, 0.08]
为什么手动拆分的方法会出问题?
你之前用strip('[]').split(',')的方式,本质是把整个字符串按逗号粗暴拆分,但没考虑到字符串元素本身带的双引号——拆分后这些引号会被当成字符串的一部分保留下来,就出现了""tu""这种多余引号的情况。而且如果后续数据里出现带逗号的字符串(比如"hello,world"),手动拆分直接会把一个元素拆成两个,彻底出错。
而json.loads()是专门为解析JSON格式数据设计的,它能精准识别JSON的语法规则:
- 自动去除字符串两端的双引号
- 把数字类型的元素转换成Python的
int或float - 处理各种特殊字符和边界情况,避免手动处理的漏洞
额外提示
如果之后你需要把列表里的unicode字符串转成bytes类型(比如Python2里的str),可以再对列表做一次针对性转换:
byte_list = [item.encode('utf-8') if isinstance(item, unicode) else item for item in clean_list] print(byte_list) # 输出: [157, 'tu', '27213579-SD', 229156181, 1524173145, 8265, 0.08]
内容的提问来源于stack exchange,提问作者Erwin Schleier
相关产品推荐
相关产品推荐

