我正在尝试使用 Python 将 Excel 转换为嵌套 JSON,其中重复值作为元素数组输入。
例如:CSV 的结构
Manufacturer,oilType,viscosity
shell,superOil,1ova
shell,superOil,2ova
shell,normalOil,1ova
bp, power, 10bba
应以 JSON(预期输出)显示为
elements: [
{
"Manufacturer": "shell",
"details": [
{
"OilType": "superOil",
"Viscosity": [
"1ova",
"2ova"
]
},
{
"OilType": "normalOil",
"Viscosity": [
"1ova"
]
}
]
},
{
"Manufacturer": "bp",
"details": [
{
"OilType": "power",
"Viscosity": [
"10bba"
]
}
]
}
]
我目前已使用
openpyxl
将 CSV 转换为 JSON,并且每个标题的值以(当前输出)这样的格式显示
[{Manufacturer: "shell", oilType: "superOil", Viscosity:"1ova"},{...},{...},...]
请帮助获得预期的输出。
您的问题实际上与
openpyxl
无关,因为您不需要保存到Excel文件中。
你可以思考:
DataFrame
在实践中,这给出了类似的东西:
import json
import pandas as pd
df = pd.read_csv("oil.csv") # or read_excel if this is an Excel
oils = df.groupby(["Manufacturer", "oilType"]).aggregate(pd.Series.to_list)
elements = [
{
"Manufacturer": manufacturer,
"Details": [
{"OilType": o, "Viscosity": v}
for o, v in data.droplevel(0).viscosity.items()
],
}
for manufacturer, data in oils.groupby(level="Manufacturer")
]
with open("oil.json", "w") as f:
json.dump({"elements": elements}, f)
有关信息,
oils
看起来像这样:
viscosity
Manufacturer oilType
bp power [10bba]
shell normalOil [1ova]
superOil [1ova, 2ova]