python - 使用 Pandas 将嵌套的 JSON 转换为 CSV
问题描述
我正在尝试使用 pandas 将嵌套的 JSON 转换为 CSV。我已经查看了此处提出的类似问题,但我似乎无法适用于我的场景。我的 JSON 如下
{
"51% FIFTY ONE PERCENT(PWD)" : {
"ID" : "51%1574233975114-WEBAD",
"contactName" : "",
"createdAt" : 1574233975,
"debit" : 118268.19999999995,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
},
"51% STORE (MUZ)" : {
"ID" : "51%1576650784631-WEBAD",
"contactName" : "",
"createdAt" : 1576650784,
"debit" : 63860,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
},
"ABBOTT S" : {
"STORE (ABD)" : {
"ID" : "ABB1574833257715-WEBAD",
"contactName" : "",
"createdAt" : 1574833257,
"debit" : 35065,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
}
}
}
这是 JSON 的一个片段,您可以看到一些条目(不是全部)是嵌套的。我尝试通过以下方式使用 json_normalize,即
import json
from pandas.io.json import json_normalize
with open('.\Customers\kontrolkotlin-CUSTOMERS-export.json') as f:
d = json.load(f)
nycphil = json_normalize(data = d)
nycphil
解决方案
我敢肯定有一个更简单的说法,但是...
如果您假设嵌套 JSON 的叶子都具有相同的字段(ID
、contactName
等...),那么您可以递归地展平您的 JSON 并创建记录列表,保留将您带到叶子的路径。
就像是:
def flatten_json(x, path="", result=None):
if result is None:
result=[]
if "ID" in x:
result.append({**x, "path": path})
return
for key in x:
flatten_json(x[key], path + "/" + key, result)
return result
df = pd.DataFrame(flatten_json(data))
print(df)
结果:
ID contactName createdAt debit defaultCompany \
0 51%1574233975114-WEBAD 1574233975 118268.2
1 51%1576650784631-WEBAD 1576650784 63860.0
2 ABB1574833257715-WEBAD 1574833257 35065.0
emailAddress lastUpdatedAt phoneNumber taskNumber \
0 0
1 0
2 0
path
0 /51% FIFTY ONE PERCENT(PWD)
1 /51% STORE (MUZ)
2 /ABBOTT S/STORE (ABD)
推荐阅读
- sql - COALESCE(SUM(...),0) COALESCE(COUNT(...),0) 在我的代码中不起作用
- c# - 如何使用脚本任务声明工作表?
- php - DateTime - Symfony FormBuilder 传递值
- java - EWS Java API 的流通知
- architecture - 哪种类型的 UML 最适合为业务用户代表我的项目架构
- python - 如何在 Jupyter Notebook 中禁用单元格截断?
- api - Guidewire 计费中心是否有一组 API 可用于从应用程序中添加/删除/删除用户?
- jquery - 在 Javascript 中编码 GET 值
- elasticsearch - ElasticSearch RestHighLevelClient 提供不准确的结果
- reactjs - 使用 spfx 在 unorderlist 列表中显示 sharepoint 列表项