python - 如何使用 Python 将 CSV 转换为 JSON?

标签 python json pandas csv

我需要使用下面指定的 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/

相关文章:

Python - 将字符串拆分为参数

python - 无法删除 pandas DataFrame 中的部分字符串

c++ - 使用 Python.h 从 C++ 调用 Django

python - pymysql - pymysql.err.InternalError : 1054, 用户输入字符串用作列名

jquery - 发送回 json 字符串并出现 echo 问题

json - SBJsonWriter 嵌套 NSDictionary

java - 如何在java + Spring Boot中生成带有转义字符 "\n"的JSON

python - Pandas groupby : building multiple columns efficiently

python - 计算每列的统计数据并将其添加到空数据框

Python 不允许在解包时注释变量的类型