Мне нужно преобразовать файл data.csv в файл «ExpectedJsonFile.json» с помощью скрипта Python, который указан ниже. Но мне этого не удается. Сценарий 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
[email protected],MyTemplate,noreply,[email protected],customer1
[email protected],MyTemplate,noreply,[email protected],customer2
Когда я запускаю "python csvjs.py", выходные данные выглядят так, как показано ниже.
{
"Source": "[email protected]",
"Template": "MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations": [
{
"ToAddresses": "[email protected]",
"ReplacementTemplateData": "customer"
},
{
"ToAddresses": "[email protected]",
"ReplacementTemplateData": "customer2"
}
]
}
Но мой ожидаемый результат такой, как показано ниже
{
"Source":"[email protected]",
"Template":"MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations":[
{
"Destination":{
"ToAddresses":[
"[email protected]"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer1\" }"
},
{
"Destination":{
"ToAddresses":[
"[email protected]"
]
},
"ReplacementTemplateData":"{ \"name\":\"customer2\" }"
},
{
"Destination":{
"ToAddresses":[
"[email protected]"
]
},
"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."
}
}
Да мне это нужно
Хорошо, хорошо, я предлагаю переписать строку Destinations = [OrderedDict(row), чтобы вы могли фактически создать промежуточный объект Destination в JSON, и поэтому ToAddresses может стать списком, а не строкой






Мне частично удалось изменить этот линейный код
contents_df = bag.drop(["Source", "Template", "ConfigurationSetName", "ToAddresses", "ReplacementTemplateData"], axis=1)
и результат, полученный сейчас, выглядит примерно так.
{
"Source":"[email protected]",
"Template":"MyTemplate",
"ConfigurationSetName": "noreply",
"Destinations":[
{
"Destination":{
"ToAddresses":"[email protected]"
}
},
{
"Destination":{
"ToAddresses":"[email protected]"
}
}
]
}
Вам действительно нужен этот ключ
"Destination":{? Похоже на шум во внешнем массиве