我需要使用下面指定的 python 脚本将 data.csv 文件转换为“ExpectedJsonFile.json
”文件。但我没能实现这一点。 Python 脚本“csvjs.py
”指定如下。
import pandas as pd
from itertools import groupby
from collections import OrderedDict
import json
df = pd.read_csv('data8.csv', dtype={
"Source" : str,
"Template": str,
"ConfigurationSetName": str,
})
results = []
for (Source, Template, ConfigurationSetName), bag in df.groupby (["Source", "Template", "ConfigurationSetName"]):
contents_df = bag.drop(["Source", "Template", "ConfigurationSetName"], axis=1)
Destinations = [OrderedDict(row) for i,row in contents_df.iterrows()]
results.append(OrderedDict([("Source", Source),
("Template", Template),
("ConfigurationSetName", ConfigurationSetName),
("Destinations", Destinations)]))
print json.dumps(results[0], indent=4)
with open('ExpectedJsonFile.json', 'w') as outfile:
outfile.write(json.dumps(results[0], indent=4))
data.csv
中的数据如下所示。
Source,Template,ConfigurationSetName,ToAddresses,ReplacementTemplateData
demo@example.com,MyTemplate,noreply,customer1@gmail.com,customer1
demo@example.com,MyTemplate,noreply,customer2@gmail.com,customer2
当我运行“python csvjs.py
”时,输出结果如下所示
{
"Source": "demo@example.com",
"Template": "MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations": [
{
"ToAddresses": "customer1@gmail.com",
"ReplacementTemplateData": "customer"
},
{
"ToAddresses": "customer2@gmail.com",
"ReplacementTemplateData": "customer2"
}
]
}
但是我的预期输出如下
{
"Source":"demo@example.com",
"Template":"MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations":[
{
"Destination":{
"ToAddresses":[
"customer1@gmail.com"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer1\" }"
},
{
"Destination":{
"ToAddresses":[
"customer2@gmail.com"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer2\" }"
},
{
"Destination":{
"ToAddresses":[
"customer3@gmail.com"
]
},
"ReplacementTemplateData":"{}"
}
],
"DefaultTemplateData":"{ \"name\":\"friend\" }"
}
我的模板如下所示
{
"Template": {
"TemplateName": "MyTemplate",
"SubjectPart": "Greetings, {{Name}}!",
"HtmlPart": "<h1>Hello {{Name}},</h1><p>Your favorite animal is cat.</p>",
"TextPart": "Dear {{Name}},\r\nYour favorite animal is cat."
}
}
最佳答案
我通过更改此行代码部分成功
contents_df = bag.drop(["Source", "Template", "ConfigurationSetName", "ToAddresses", "ReplacementTemplateData"], axis=1)
现在生成的输出如下所示。
{
"Source":"demo@example.com",
"Template":"MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations":[
{
"Destination":{
"ToAddresses":"customer1@gmail.com"
}
},
{
"Destination":{
"ToAddresses":"customer2@gmail.com"
}
}
]
}
关于python - 如何使用 Python 将 CSV 转换为 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313990/