【发布时间】:2021-12-24 07:14:22
【问题描述】:
我得到一个排列的多级 JSON 响应,其中一个级别是日期,另一个级别从 API 复制较低级别数组中的数据,如下所示:
{
"2021-11-04": {
"40-41 (25-27)": {
"sales": 26,
"balance": 480,
"size_name": "40-41",
"size_origin": "25-27"
},
"42-43 (27-29)": {
"sales": 63,
"balance": 817,
"size_name": "42-43",
"size_origin": "27-29"
}
},
"2021-11-05": {
"40-41 (25-27)": {
"sales": 35,
"balance": 445,
"size_name": "40-41",
"size_origin": "25-27"
},
"42-43 (27-29)": {
"sales": 95,
"balance": 725,
"size_name": "42-43",
"size_origin": "27-29"
}
}
}
但我需要让它不是一个数组,而是一个扁平化的对象,以便轻松地用 pandas 形成一个数据框。怎么做?
需要的结果:
{
{
"day": "2021-11-04",
"sales": 26,
"balance": 480,
"size_name": "40-41",
"size_origin": "25-27"
},
{
"day": "2021-11-04",
"sales": 63,
"balance": 817,
"size_name": "42-43",
"size_origin": "27-29"
},
{
"day": "2021-11-05",
"sales": 35,
"balance": 445,
"size_name": "40-41",
"size_origin": "25-27"
},
{
"day": "2021-11-05",
"sales": 95,
"balance": 725,
"size_name": "42-43",
"size_origin": "27-29"
}
}
我可以在 pandas 中转换它,而不是 JSON 格式,但我仍然不明白如何转换这种结构。
【问题讨论】:
-
结果不是有效的 JSON 格式。如果你想拥有一个对象数组,这 1 行可以给你你需要的东西
[{ **vv, **{'day': k}} for k, v in data.items() for _, vv in v.items()]。
标签: python json pandas flatten