【问题标题】:How do I organize JSON output after converting from CSV?从 CSV 转换后如何组织 JSON 输出?
【发布时间】:2019-07-03 19:14:30
【问题描述】:

我正在尝试将 csv 文件转换为 json 文件以发送到 api。我对我创建的 json 输出的结构有困难。

import csv
import json

csvfile = open('User_List.csv', 'r')
jsonfile = open('user_list.json', 'w')    

csv_reader = csv.DictReader(csvfile)
for row in reader:
    json.dump(row, jsonfile, indent = 4)
    jsonfile.write('\n')

我的代码当前输出:

{
    "firstName": "Richard",
    "lastName": "Tyler",
    "email": "hallbeth@placeholder.email",
    "zip": "58570"
}

我需要它来阅读:

{
    "email": "hallbeth@placeholder.email",
    "Datafields": {"firstName": "Richard",
                   "lastName": "Tyler",
                   "zip": "58570"}
}

【问题讨论】:

    标签: python arrays json csv


    【解决方案1】:

    在以 JSON 格式输出之前,您需要重新组织每一行的数据,使其成为您想要的格式:

    import csv
    import json
    
    with open('User_List.csv', 'r', newline='') as csvfile, \
         open('user_list.json', 'w') as jsonfile:
    
        for row in csv.DictReader(csvfile):
            # Reorganize data into desired format.
            restructured = {
                'email': row['email'],
                'Datafields':
                  {fieldname: value for (fieldname, value) in row.items()
                      if fieldname != 'email'}
            }
            json.dump(restructured, jsonfile, indent=4)
            jsonfile.write('\n')
    

    【讨论】:

      【解决方案2】:

      我们称之为temp_dict

      temp_dict = {
          "firstName": "Richard",
          "lastName": "Tyler",
          "email": "hallbeth@placeholder.email",
          "zip": "58570"
      }
      
      new_dict = {
          "email" : temp_dict["email"],
          "Datafields" : { 
              "firstName": temp_dict["firstName"],
              "lastName": temp_dict["lastName"],    
              "zip": temp_dict["zip"]        
              }
      

      您可以通过这种方式简单地创建一个新字典并为其键分配值

      【讨论】:

        【解决方案3】:

        您可以从原来的 data 中创建一个字典,并使用对 "DataFields" 的理解:

        {'email': data['email'], 'Datafields' : {k:v for k,v in data.items() if k!='email'}}
        

        请看下面的例子

        data =  data = {
            "firstName": "Richard",
            "lastName": "Tyler",
            "email": "hallbeth@placeholder.email",
            "zip": "58570"
        }
        organized = {
            'email': data.get('email'),
            'Datafields' : {k:v for k,v in data.items() if k!='email'}
        }
        print(organized)
        {'email': 'hallbeth@placeholder.email', 'Datafields': {'firstName': 'Richard', 'lastName': 'Tyler', 'zip': '58570'}}
        

        【讨论】:

        • 有没有办法在不定义第一个“数据”部分的情况下做到这一点?我从我的 json 输出中提供了一个示例,但是有数千行,因此我不确定如何使用这种方法。谢谢!
        猜你喜欢
        • 2019-12-01
        • 2021-01-01
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多