如何用df.to_json()输出含嵌套JSON列表的DataFrame为标准JSON
解决DataFrame类JSON嵌套列转标准JSON的问题
直接用df.to_json()无法实现需求,因为原DataFrame的items列是类JSON格式的字符串(键无引号、用=分隔键值),而非真正的嵌套列表/字典结构,to_json会将其当作普通字符串输出。要得到目标格式,需先将items列转换为合法的Python嵌套数据结构,再调用to_json。
具体步骤
预处理
items列,转换为合法Python对象
先通过正则表达式将类JSON字符串转换为符合Python字面量语法的格式(给键加引号、把=替换为:),再用ast.literal_eval解析成列表/字典。调用
to_json输出标准JSON
转换后的数据结构是真正的嵌套类型,to_json会保留其层级结构输出标准JSON。
代码示例
import pandas as pd import ast import re # 定义解析函数 def parse_item_string(item_str): # 给键添加引号,将=替换为: processed_str = re.sub(r'(\w+)=', r'"\1":', item_str) # 解析为Python嵌套对象 return ast.literal_eval(processed_str) # 示例DataFrame df = pd.DataFrame({ "id": ["3b68b7b2-f42c-418b-aa88-02450d66b616"], "items": ["[{quantity=3.0, item_id=210defdb-de69-4d03-bddd-7db626cd501b, description=Abc}, {quantity=1.0, item_id=ff457660-5f30-4432-a5af-564a9dee0029, description=xyz . 23}, {quantity=10.0, item_id=8dbd22f2-cc13-4776-b58c-4d6fe0f3463e, description=abc def}]"] }) # 处理items列 df['items'] = df['items'].apply(parse_item_string) # 输出标准嵌套JSON print(df.to_json(orient='records', indent=4))
输出结果
[ { "id": "3b68b7b2-f42c-418b-aa88-02450d66b616", "items": [ { "quantity": 3.0, "item_id": "210defdb-de69-4d03-bddd-7db626cd501b", "description": "Abc" }, { "quantity": 1.0, "item_id": "ff457660-5f30-4432-a5af-564a9dee0029", "description": "xyz . 23" }, { "quantity": 10.0, "item_id": "8dbd22f2-cc13-4776-b58c-4d6fe0f3463e", "description": "abc def" } ] } ]
注意事项
如果items列的键包含特殊字符(如空格、连字符),需要调整正则表达式以匹配这类键,例如将(\w+)替换为([\w-]+)来匹配带连字符的键。
内容的提问来源于stack exchange,提问作者filpa
相关产品推荐
相关产品推荐

