Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将嵌套JSON文件转换为CSV_Python_Json_Csv - Fatal编程技术网

在Python中将嵌套JSON文件转换为CSV

在Python中将嵌套JSON文件转换为CSV,python,json,csv,Python,Json,Csv,我有一个json文件,其中包含嵌套的键和值。我的要求是数据采用csv格式,csv文件应包含以下详细信息 name title emails updatTime roles 这是我的密码: import json import csv with open ("D:\Python_Tolusko/IICS_Users.json") as file: data=json.load(file) fname='D:\Python_Tolusko/output.csv

我有一个json文件,其中包含嵌套的键和值。我的要求是数据采用csv格式,csv文件应包含以下详细信息

name title emails updatTime roles
这是我的密码:

import json
import csv
with open ("D:\Python_Tolusko/IICS_Users.json") as file:
        data=json.load(file)

fname='D:\Python_Tolusko/output.csv'

with open(fname,"w") as file:
        csv_file=csv.writer(file)
        csv_file.writerow(["name","title","emails","updateTime","roles"])
        for item in data:
                csv_file.writerow([item['name'],item['title'],item['emails'],item['updateTime'],item['roles']['name']])
                #rec=(value for value in data.roles.name())
                #csv_file.writerow(rec)
然而,在运行代码时,我发现以下错误

TypeError                                 Traceback (most recent call last)
<ipython-input-2-e810dd9e7ace> in <module>
     11         csv_file.writerow(["name","title","emails","updateTime","roles"])
     12         for item in data:
---> 13                 csv_file.writerow([item['name'],item['title'],item['emails'],item['updateTime'],item['roles']['name']])
     14                 #rec=(value for value in data.roles.name())
     15                 #csv_file.writerow(rec)

TypeError: list indices must be integers or slices, not str
请帮助我如何为相应的用户提供所需的角色


提前感谢。

您的数据中缺少字段,如果有,我建议使用
。获取词典的
选项

诸如此类

jsonfile = open('data.json', 'r').read()
csvfile = open('data.csv', 'w', newline='')
rows = json.loads(jsonfile)
output = []
for row in rows:
    outrow = [row.get('name'),
              row.get('title'),
              row.get('emails'),
              row.get('updateTime'),
              row.get('roles')]
    output.append(outrow)
writer = csv.writer(csvfile)
writer.writerows(output)

对于放置整数的版本,您在之前缺少了一个]谢谢您的评论。我的坏消息我错过了它,我更新了它,现在它给出了以下错误------------------------------------------------------------------->13 csv_文件。writerow([item['name',item['title',item['emails',item['updateTime',item['roles'][1] ])索引器错误:列表索引超出范围更新您的问题-可能对于此条目
item['roles']
只有一个条目,即索引0。最初我尝试使用item['roles']但在这种情况下,所有与角色相关的值都会出现,因此认为应该使用索引来更新它,但使用索引0时,它也会给出索引超出范围的错误。也许角色是一个空列表-IDK您必须检查它-这是您的数据!
[
  {
    "@type": "user",
    "id": "017Q3A0300000000000C",
    "name": "Abc",
    "updateTime": "2021-04-07T09:54:06.000Z",
    "title": "Dev",
    "password": "********",
    "phone": "9999999999",
    "emails": "abc@gmail.com",
    "roles": [
      {
        "@type": "role",
        "name": "MDM Business User",
        "description": "Role used for MDM C360 Business Application runtime."
      },
      {
        "@type": "role",
        "name": "Customer 360 Data Steward",
        "description": "MDM Customer 360 Data Steward"
      },
      {
        "@type": "role",
        "name": "Data Viewer",
        "description": "Role used for granting access for data"
      },
      {
        "@type": "role",
        "name": "Designer",
        "description": "Role for creating assets, tasks, and processes. Can configure connections, schedules, and runtime environments. Has access to the Application Integration Console."
      },
      {
        "@type": "role",
        "name": "Business Manager",
        "description": "Role used for business managers"
      },
      {
        "@type": "role",
        "name": "MDM Designer",
        "description": "MDM Designer"
      },
      {
        "@type": "role",
        "name": "Admin",
        "description": "Role for performing administrative tasks for an organization. Has full access to all licensed services."
      },
      {
        "@type": "role",
        "name": "Deployer",
        "description": "Role used by deployer"
      },
      {
        "@type": "role",
        "name": "Operator",
        "description": "Role used for monitoring execution environments"
      },
      {
        "@type": "role",
        "name": "Monitor",
        "description": "Role used for application monitor"
      },
      {
        "@type": "role",
        "name": "Customer 360 Manager",
        "description": "MDM Customer 360 Manager"
      },
      {
        "@type": "role",
        "name": "Data Preview",
        "description": "Role to preview data"
      },
      {
        "@type": "role",
        "name": "Service Consumer",
        "description": "Role for running tasks, taskflows, and processes."
      },
      {
        "@type": "role",
        "name": "Customer 360 Analyst",
        "description": "MDM Customer 360 Analyst"
      },
      {
        "@type": "role",
        "name": "Data Integration Task Executor",
        "description": "Role to run Data Integration tasks"
      }
    ]
  },
  {
    "@type": "user",
    "id": "017Q3A03000000000002",
    "name": "Admin",
    "updateTime": "2021-05-28T12:51:44.000Z",
    "title": "Admin",
    "password": "********",
    "phone": "9999999999",
    "emails": "Admin@123.com",

    "roles": [
      {
        "@type": "role",
        "name": "Designer",
        "description": "Role for creating assets, tasks, and processes. Can configure connections, schedules, and runtime environments. Has access to the Application Integration Console."
      }
    ]
  },
  {
    "@type": "user",
    "id": "017Q3A0300000000000G",
    "orgId": "017Q3A",
    "name": "Xyz",
    "title": "Developer",
    "password": "********",
    "phone": "9999999999",
    "emails": "xyz@123.com",
    
    "roles": [
      {
        "@type": "role",
        "name": "Customer 360 Manager",
        "description": "MDM Customer 360 Manager"
      },
      {
        "@type": "role",
        "name": "Data Preview",
        "description": "Role to preview data"
      },
      {
        "@type": "role",
        "name": "Designer",
        "description": "Role for creating assets, tasks, and processes. Can configure connections, schedules, and runtime environments. Has access to the Application Integration Console."
      },
      {
        "@type": "role",
        "name": "Data Viewer",
        "description": "Role used for granting access for data"
      },
      {
        "@type": "role",
        "name": "Data Integration Task Executor",
        "description": "Role to run Data Integration tasks"
      },
      {
        "@type": "role",
        "name": "Admin",
        "description": "Role for performing administrative tasks for an organization. Has full access to all licensed services."
      },
      {
        "@type": "role",
        "name": "Customer 360 Data Steward",
        "description": "MDM Customer 360 Data Steward"
      },
      {
        "@type": "role",
        "name": "Service Consumer",
        "description": "Role for running tasks, taskflows, and processes."
      },
      {
        "@type": "role",
        "name": "MDM Designer",
        "description": "MDM Designer"
      },
      {
        "@type": "role",
        "name": "MDM Business User",
        "description": "Role used for MDM C360 Business Application runtime."
      },
      {
        "@type": "role",
        "name": "Customer 360 Analyst",
        "description": "MDM Customer 360 Analyst"
      },
      {
        "@type": "role",
        "name": "Monitor",
        "description": "Role used for application monitor"
      },
      {
        "@type": "role",
        "name": "Business Manager",
        "description": "Role used for business managers"
      },
      {
        "@type": "role",
        "name": "Deployer",
        "description": "Role used by deployer"
      },
      {
        "@type": "role",
        "name": "Operator",
        "description": "Role used for monitoring execution environments"
      }
    ]
  }
]
jsonfile = open('data.json', 'r').read()
csvfile = open('data.csv', 'w', newline='')
rows = json.loads(jsonfile)
output = []
for row in rows:
    outrow = [row.get('name'),
              row.get('title'),
              row.get('emails'),
              row.get('updateTime'),
              row.get('roles')]
    output.append(outrow)
writer = csv.writer(csvfile)
writer.writerows(output)