JSON转CSV时为多值及复杂多值属性设置不同分隔符的实现方法
实现JSON自定义格式转CSV的解决方案
你需要在导出CSV前,先对两个特殊字段phone和parsed_address做格式预处理,再用pandas默认的逗号分隔导出即可,完整实现代码如下:
import pandas as pd # 读取JSON文件 df = pd.read_json("input.json") # 处理phone字段:提取所有手机号用|拼接 df["phone"] = df["phone"].apply(lambda x: "|".join([item["phone"] for item in x])) # 处理parsed_address字段:单条地址内部字段用;拼接,多条地址用|拼接 # 按预期输出的字段顺序:address_line_1、city、state、postal_code、country def process_address(addrs): addr_list = [] for addr in addrs: addr_str = ";".join([ addr["address_line_1"], addr["city"], addr["state"], addr["postal_code"], addr["country"] ]) addr_list.append(addr_str) return "|".join(addr_list) df["parsed_address"] = df["parsed_address"].apply(process_address) # 导出为CSV,全局用逗号分隔 df.to_csv("output.csv", sep=",", index=False, encoding="utf-8")
补充说明
- 代码运行后输出的CSV内容完全匹配需求,你提供的预期输出里
first_name值写的samon属于笔误,实际会保留JSON里的原始值saman - 如果后续需要调整地址拼接的字段顺序或者增减字段,直接修改
process_address函数里的字段列表即可 - 如果字段可能存在空值,可在拼接时添加判空逻辑避免报错,比如把
addr["address_line_1"]改成addr.get("address_line_1", "")
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

