如何使用Python将JSON文件转换为CSV

2024-10-01 09:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取一个用户的执行详细信息,以及我在JSON中捕获并保存的所有数据,我想将其从JSON转换为JSON,并将JSON中的所有数据写入csv文件,分隔符=','

import os
import re
import json
import warnings
import urllib.request
import csv

warnings.filterwarnings('ignore', message='Unverified HTTPS request')

url = "http://machine245.local:4450/api/35/project/ProjectName01/executions"
headers = {
  'Accept': 'application/json',
  'X-Rundeck-Auth-Token': 'kP8s90rpfsdjfsdkHNKSLndskdsksd'
}
response = requests.request("GET", url, headers=headers, verify = False)
#print(response.text.encode('utf8'))

response_value = response.json()
response_value = json.dumps(response_value)
resp = json.loads(response_value)

print(resp)

with open('execute.csv','w') as executeData:
    csvWriter = csv.writer(executeData,delimiter=',')
    count = 0
    for result in resp:
        if count ==0:
            print("No Data to Read") 
            count+=1
        else:
        csvWriter.writerow(result.values)

JSON中的数据是

[
  {
    "href": "http://machine245.local:4440/api/35/job/e3bc6e45-9571-4d8b-bcf6-69274532eea06",
    "averageDuration": 15089,
    "id": "e3bc6e45-9571-4d8b-bcf6-6927610esds6",
    "scheduleEnabled": true,
    "scheduled": false,
    "enabled": true,
    "permalink": "http://machine245.local:4440/project/Project01/job/show/e3bc6e45-9571-4d8b-bcf6-6927610eea06",
    "group": null,
    "description": " This job is to monitor the health of No servers ",
    "project": "Project01",
    "name": "Server Health Monitoring"
  },
  {
    "href": "http://machine245.local:4440/api/35/job/e3bc6e45-9671-4d8b-bcf6-64374532eea06",
    "averageDuration": 15089,
    "id": "b56bc6e45-9571-4d8b-bcf6-6927610esds6",
    "scheduleEnabled": true,
    "scheduled": false,
    "enabled": true,
    "permalink": "http://machine245.local:4440/project/Project01/job/show/e3bc6e45-9443-4d8b-bcf6-6927610eea06",
    "group": null,
    "description": " This job is to monitor the health of Client servers ",
    "project": "Project01",
    "name": "Client Health Monitoring"
  }
]

有人能帮助解决问题吗,或者任何替代方法也可以

提前谢谢


Tags: csvimportprojectjsontruehttpvalueresponse
3条回答

您正在遍历列表,每个列表项都是一个字典。所以不是csvWriter.writerow(result.values)

你应该

 csvWriter.writerow(result.keys())
 csvWriter.writerow(result.values())

您可以在这里编写字典的键、值对。您可以写“key1,key2”,然后写下一行“value1,value2”。或者在循环之前创建一个带有键的标题,然后在列表中每个项目的每一行中写入值。请参阅此链接上的更多示例 How do I write a Python dictionary to a csv file?

为什么要跳过列表中的第一项,然后将json转换为字符串并再次转换为json。您可能需要再次检查这些

response_value = response.json()
#<class 'list'>
response_value = json.dumps(response_value)
#<class 'str'>
resp = json.loads(response_value)
#<class 'list'>

此外,在公共域中共享令牌和真实URL可能不是一个好主意

您可以尝试使用pandas,使用pandas.read_json读取文件并使用.to_csv保存文件

很简单

    for result in resp:
        if count ==0:
            print("No Data to Read") 
            count+=1
        else:
        csvWriter.writerow(result.values)

这是不必要的

    for result in resp:
        csvWriter.writerow(result.values)

相关问题 更多 >