如何使用Pandas DataFrame处理JSON后还原为原JSON格式
DataFrame转回指定嵌套JSON格式实现方法
核心逻辑是拆分打平后的两类字段:外层固定的product嵌套结构、order数组对应的记录列表,分别重构后组装为目标结构即可,无需依赖额外第三方库,完整实现代码如下:
import pandas as pd import json # 已完成的打平、缺失值填充逻辑 df = pd.json_normalize( data, record_path =['order'], meta=[ ['product', 'a'], ['product', 'b'] ] ) # 注意填充值用字符串"0",匹配目标输出的格式要求 df = df.fillna("0") # 转回嵌套JSON核心逻辑 result = { # 重构product嵌套结构:所有行的product值一致,取第一行数据即可 "product": { "a": df["product.a"].iloc[0], "b": df["product.b"].iloc[0] }, # 提取order对应列,转为字典列表,自动保留补全的food、amount字段 "order": df[["code", "qty", "food", "amount"]].to_dict(orient="records") } # 如需输出格式化的JSON字符串,执行以下代码 output_json_str = json.dumps(result, indent=4, ensure_ascii=False) print(output_json_str)
运行后输出结果和预期完全一致:
{ "product": { "a": "apple", "b": "banana" }, "order": [ { "code": "123", "qty": "1", "food": "apple x10|banana x2", "amount": "200" }, { "code": "bundle", "qty": "1", "food": "0", "amount": "0" } ] }
注意事项
- 缺失值填充不要用数字
0:目标输出中补全的food、amount字段为字符串格式"0",填充数字0会导致转JSON后输出数值类型,和预期不符。 - 转换order列表时显式指定列:打平后的DataFrame带有
product.a、product.b外层字段,显式指定order相关列可以避免这些字段错误出现在order子对象中。 - 原始测试JSON存在语法错误:示例中第二个order对象的
"code":"bundle"行末尾缺失逗号,实际加载JSON时需要补全,否则会触发解析报错。
内容的提问来源于stack exchange,提问作者isgood
相关产品推荐
相关产品推荐

