如何在Python中将Mixpanel多行JSON字符串转为JSON列表?
问题描述
我从Mixpanel获取的数据是以换行符分隔的JSON字符串,每个JSON结构可能不同,示例如下:
"{\"event\":\"info1xxxxx\",\"Id\":\"0001\"} {\"event\":\"info2xxxxx\",\"Id\":\"0002\"} {\"event\":\"info3xxxxx\",\"Id\":\"0003\"} {\"event\":\"info3xxxxx\",\"Id\":\"0003\",\"other_key\":\"value\"}..."希望将其转换为标准JSON数组格式,示例如下:
[{"event":"info1xxxxx","Id":"0001"}, {"event":"info2xxxxx","Id":"0002"}, {"event":"info3xxxxx","Id":"0003"}, {"event":"info3xxxxx","Id":"0003","other_key":"value"},...]请问该如何实现?
实现方案
方法1:Python脚本自动化处理
适合批量或需要集成到工作流的场景,步骤清晰且能保证JSON合法性:
import json # 替换为你的原始Mixpanel数据 raw_data = '''"{\"event\":\"info1xxxxx\",\"Id\":\"0001\"} {\"event\":\"info2xxxxx\",\"Id\":\"0002\"} {\"event\":\"info3xxxxx\",\"Id\":\"0003\"} {\"event\":\"info3xxxxx\",\"Id\":\"0003\",\"other_key\":\"value\"}"''' # 1. 去除首尾包裹的双引号 cleaned_data = raw_data.strip('"') # 2. 按换行分割,清理每行空白并过滤空行 json_lines = [line.strip() for line in cleaned_data.split('\n') if line.strip()] # 3. 拼接成JSON数组格式 array_str = '[' + ',\n '.join(json_lines) + ']' # 可选:解析后格式化输出,确保JSON语法正确 try: json_array = json.loads(array_str) print(json.dumps(json_array, indent=2)) except json.JSONDecodeError as e: print(f"JSON格式错误:{e}")
方法2:命令行工具jq快速处理
适合Linux/macOS或已安装jq的Windows环境,无需写代码:
- 将原始数据保存到文件(比如
mixpanel_data.txt) - 执行以下命令:
jq -sR 'split("\n") | map(trim) | map(select(length>0)) | map(fromjson)' mixpanel_data.txt
命令解释:
-sR:将输入作为单个字符串读取split("\n"):按换行分割成数组map(trim):清理每行前后空白map(select(length>0)):过滤空行map(fromjson):将字符串转为JSON对象,最终输出标准数组
方法3:文本编辑器手动处理(少量数据)
如果数据量小,直接用编辑器操作:
- 删除原始数据首尾的双引号
- 清理每行开头的多余空格(可选,不影响JSON合法性)
- 在第一行开头添加
[ - 在除最后一行外的所有行末尾添加
, - 在最后一行末尾添加
]
注意:若原始数据末尾有...占位符,需替换为实际的最后一个JSON对象后再操作。
内容的提问来源于stack exchange,提问作者Jesse Jin
相关产品推荐
相关产品推荐

