首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python错误与不存在键的JSON到CSV

使用Python错误与不存在键的JSON到CSV
EN

Stack Overflow用户
提问于 2021-08-05 08:10:28
回答 2查看 32关注 0票数 0

我想把JSON数据转换成csv文件,问题是不是所有的数据都是相同的,它们不是都有相同的键。我成功地手动打印了第一行键名,然后调用相应键的每个值。

我的代码:

代码语言:javascript
复制
import json
import csv

with open("./res.json") as file:
    data = json.load(file)

file_name = "output.csv"

with open(file_name, "w") as file:
    csv_file = csv.writer(file)
    csv_file.writerow(["Account_Name__c", "License_Address__c", "Operating_Name__c", "Property_Location__c", "License_Address_for_Business_Directroy__c", "License_Status__c", "Account__c", "Building__c", "Longitude__c", "Latitude__c", "Id", "CurrencyIsoCode", "Property_Location__r"])
    if "resultData" in data:
        for item in data["resultData"]:
            csv_file.writerow([item['Account_Name__c'], item['License_Address__c'], item['Operating_Name__c'], item['Property_Location__c'], item['License_Address_for_Business_Directroy__c'], item['License_Status__c'], item['Account__c'], item['Building__c'], item['Longitude__c'], item['Latitude__c'], item['Id'], item['CurrencyIsoCode'], item['Property_Location__r']])

数据样本

代码语言:javascript
复制
{
  "resultData": [
    {
      "Account_Name__c": "ZURI FLOWERS DMCC",
      "License_Address__c": "Unit No: 2201<br>Tiffany Towers<br>Plot No: JLT-PH2-W2A<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "Operating_Name__c": "001b000000MV4EnAAL",
      "Property_Location__c": "a1G10000000XLRNEA4",
      "License_Address_for_Business_Directroy__c": "Unit No: 2201<br>Tiffany Towers<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "License_Status__c": "Active",
      "Account__c": "001b000000MV4EnAAL",
      "Building__c": "Tiffany Towers",
      "Longitude__c": "55.14960835",
      "Latitude__c": "25.07726334",
      "Id": "a03b0000006h0Y7AAI",
      "CurrencyIsoCode": "AED",
      "Operating_Name__r": {
        "Name": "ZURI FLOWERS DMCC",
        "Id": "001b000000MV4EnAAL",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      },
      "Property_Location__r": {
        "Name": "PL-017352",
        "Function_Type_Class__c": "Office",
        "Id": "a1G10000000XLRNEA4",
        "RecordTypeId": "01210000000YFA3AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Publishing_agreement_for_BD__c": "Publish all details in DMCC online/printed content",
        "Name": "ZURI FLOWERS DMCC",
        "Phone_BD__c": "+971506570630",
        "Company_Website_Address__c": "01:00",
        "Company_Official_Email_Address__c": "kakaji1@gmail.com",
        "Saturday_From__c": "Closed",
        "Saturday_To__c": "Closed",
        "Operating_Time_from_regular__c": "09:00 AM",
        "Operating_Time_to_regular__c": "05:00 PM",
        "Monday_From__c": "09:00 AM",
        "Monday_To__c": "05:00 PM",
        "Tuesday_From__c": "09:00 AM",
        "Tuesday_To__c": "05:00 PM",
        "Wednesday_From__c": "09:00 AM",
        "Wednesday_To__c": "05:00 PM",
        "Thursday_From__c": "09:00 AM",
        "Thursday_To__c": "04:00 PM",
        "Friday_From__c": "Closed",
        "Friday_To__c": "Closed",
        "Id": "001b000000MV4EnAAL",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    },
    {
      "Account_Name__c": "ZYDUS WORLDWIDE DMCC",
      "License_Address__c": "Unit No: 908<br>Armada 2<br>Plot No: JLT-PH2-P2A<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "Operating_Name__c": "0011000000jkjT1AAI",
      "Property_Location__c": "a1G10000000XKCCEA4",
      "License_Address_for_Business_Directroy__c": "Unit No: 908<br>Armada 2<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "License_Status__c": "Active",
      "Account__c": "0011000000jkjT1AAI",
      "Building__c": "Armada 2",
      "Longitude__c": "55.14552528",
      "Latitude__c": "25.07481256",
      "Id": "a031000000M6HQ6AAN",
      "CurrencyIsoCode": "AED",
      "Operating_Name__r": {
        "Name": "ZYDUS WORLDWIDE DMCC",
        "Id": "0011000000jkjT1AAI",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      },
      "Property_Location__r": {
        "Name": "PL-012567",
        "Function_Type_Class__c": "Office",
        "Id": "a1G10000000XKCCEA4",
        "RecordTypeId": "01210000000YFA3AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Publishing_agreement_for_BD__c": "Publish only name and address in DMCC online/printed content",
        "Name": "ZYDUS WORLDWIDE DMCC",
        "Phone_BD__c": "+97143998182",
        "Website": "www.zyduscadila.com",
        "Company_Official_Email_Address__c": "ketanbhut@zydusworldwide.ae",
        "Saturday_From__c": "Closed",
        "Saturday_To__c": "Closed",
        "Operating_Time_from_regular__c": "09:00 AM",
        "Operating_Time_to_regular__c": "06:00 PM",
        "Monday_From__c": "09:00 AM",
        "Monday_To__c": "06:00 PM",
        "Tuesday_From__c": "09:00 AM",
        "Tuesday_To__c": "06:00 PM",
        "Wednesday_From__c": "09:00 AM",
        "Wednesday_To__c": "06:00 PM",
        "Thursday_From__c": "09:00 AM",
        "Thursday_To__c": "06:00 PM",
        "Friday_From__c": "Closed",
        "Friday_To__c": "Closed",
        "Id": "0011000000jkjT1AAI",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    },
    {
      "Account_Name__c": "ZYLIN TECHNOLOGIES DMCC",
      "License_Address__c": "Unit No: 3O-01-2357<br>Jewellery &amp; Gemplex 3<br>Plot No: DMCC-PH2-J&amp;GPlexS<br>Jewellery &amp; Gemplex<br>Dubai<br>United Arab Emirates",
      "Property_Location__c": "a1G10000001X1gHEAS",
      "License_Status__c": "Active",
      "Account__c": "0015F00001NOV3iQAH",
      "Building__c": "55.13646334",
      "Id": "a035F00001K4be6QAB",
      "CurrencyIsoCode": "AED",
      "Property_Location__r": {
        "Name": "PL-128190",
        "Function_Type_Class__c": "Flexi Desk",
        "Id": "a1G10000001X1gHEAS",
        "RecordTypeId": "01210000000YFA5AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Publishing_agreement_for_BD__c": "Publish all details in DMCC online/printed content",
        "Name": "ZYLIN TECHNOLOGIES DMCC",
        "Phone_BD__c": "+971504569106",
        "Company_Official_Email_Address__c": "ziad@zylintech.com",
        "Saturday_From__c": "Closed",
        "Saturday_To__c": "Closed",
        "Operating_Time_from_regular__c": "09:00 AM",
        "Operating_Time_to_regular__c": "05:00 PM",
        "Monday_From__c": "09:00 AM",
        "Monday_To__c": "05:00 PM",
        "Tuesday_From__c": "09:00 AM",
        "Tuesday_To__c": "05:00 PM",
        "Wednesday_From__c": "09:00 AM",
        "Wednesday_To__c": "05:00 PM",
        "Thursday_From__c": "09:00 AM",
        "Thursday_To__c": "05:00 PM",
        "Friday_From__c": "Closed",
        "Friday_To__c": "Closed",
        "Id": "0015F00001NOV3iQAH",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    },
    {
      "Account_Name__c": "ZYLWAY DMCC",
      "License_Address__c": "Unit No: 3O-01-3360<br>Jewellery &amp; Gemplex 3<br>Plot No: DMCC-PH2-J&amp;GPlexS<br>Jewellery &amp; Gemplex<br>Dubai<br>United Arab Emirates",
      "Property_Location__c": "a1G5F000002KAF5UAO",
      "License_Status__c": "Active",
      "Account__c": "0015F00001TmYjTQAV",
      "Building__c": "55.13646334",
      "Id": "a035F00001TS4hiQAD",
      "CurrencyIsoCode": "AED",
      "Property_Location__r": {
        "Name": "PL-357158",
        "Function_Type_Class__c": "Flexi Desk",
        "Id": "a1G5F000002KAF5UAO",
        "RecordTypeId": "01210000000YFA5AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Name": "ZYLWAY DMCC",
        "Phone_BD__c": "+971564158834",
        "Id": "0015F00001TmYjTQAV",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    },
    {
      "Account_Name__c": "ZYMENON UDSTYRE CONSULTING DMCC",
      "License_Address__c": "Unit No: 2H-05-124<br>Jewellery &amp; Gemplex 2<br>Plot No: DMCC-PH2-J&amp;GPlexS<br>Jewellery &amp; Gemplex<br>DUBAI<br>United Arab Emirates",
      "Property_Location__c": "a1G10000000XGmnEAG",
      "License_Status__c": "Active",
      "Account__c": "0011000000xig08AAA",
      "Building__c": "55.13603472",
      "Id": "a031000000YrBUGAA3",
      "CurrencyIsoCode": "AED",
      "Property_Location__r": {
        "Name": "PL-001899",
        "Function_Type_Class__c": "Flexi Desk",
        "Id": "a1G10000000XGmnEAG",
        "RecordTypeId": "01210000000YFA5AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Publishing_agreement_for_BD__c": "Publish only name and address in DMCC online/printed content",
        "Name": "ZYMENON UDSTYRE CONSULTING DMCC",
        "Phone_BD__c": "+97144320400",
        "Company_Official_Email_Address__c": "tasawar.hussayn@panoramaconsulting.ae",
        "Saturday_From__c": "Closed",
        "Saturday_To__c": "Closed",
        "Operating_Time_from_regular__c": "09:00 AM",
        "Operating_Time_to_regular__c": "05:00 PM",
        "Monday_From__c": "09:00 AM",
        "Monday_To__c": "05:00 PM",
        "Tuesday_From__c": "09:00 AM",
        "Tuesday_To__c": "05:00 PM",
        "Wednesday_From__c": "09:00 AM",
        "Wednesday_To__c": "05:00 PM",
        "Thursday_From__c": "09:00 AM",
        "Thursday_To__c": "05:00 PM",
        "Friday_From__c": "Closed",
        "Friday_To__c": "Closed",
        "Id": "0011000000xig08AAA",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    },
    {
      "Account_Name__c": "ZYWA PAYMENTS DMCC",
      "License_Address__c": "Unit No: 3306-1<br>Mazaya Business Avenue BB1<br>Plot No: JLTE-PH2-BB1<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "Property_Location__c": "a1G10000001W6LgEAK",
      "License_Address_for_Business_Directroy__c": "Unit No: 3306-1<br>Mazaya Business Avenue BB1<br>Jumeirah Lakes Towers<br>Dubai<br>UAE",
      "License_Status__c": "Active",
      "Account__c": "0015F00001VsGJFQA3",
      "Building__c": "55.1450717",
      "Longitude__c": "55.1450717",
      "Latitude__c": "25.06828081",
      "Id": "a035F00001ZVZS0QAP",
      "CurrencyIsoCode": "AED",
      "Property_Location__r": {
        "Name": "PL-102042",
        "Function_Type_Class__c": "BC Office 4",
        "Id": "a1G10000001W6LgEAK",
        "RecordTypeId": "01210000000YFA5AAO",
        "CurrencyIsoCode": "AED"
      },
      "Account__r": {
        "Name": "ZYWA PAYMENTS DMCC",
        "Phone_BD__c": "+971509708621",
        "Id": "0015F00001VsGJFQA3",
        "RecordTypeId": "01210000000a3e5AAA",
        "CurrencyIsoCode": "AED"
      }
    }
  ]
}

pycharm会给我带来这个错误,

回溯(最近一次调用):文件“./json_to_csv.py”,第14行,在csv_file.writerow中([项目‘’Account_Name__c‘、项目’‘License_Address__c’、项目‘’Operating_Name__c‘、项目’‘Property_Location__c’、csv_file.writerow项目‘’License_Status__c‘、项目’‘Account__c’、项目‘’Building_c‘、项目’‘Longitude_c’、项目‘’Latitude_c‘,项目‘’Id‘,’‘CurrencyIsoCode’,项目‘’Property_Location__r‘) KeyError:'Operating_Name__c’

EN

回答 2

Stack Overflow用户

发布于 2021-08-05 08:17:14

Operating_name_c似乎没有钥匙。有一个用于Operating_name__r的密钥。

票数 0
EN

Stack Overflow用户

发布于 2021-08-05 12:24:10

最好的解决方案是首先扫描所有记录并收集所有可能的密钥:

代码语言:javascript
复制
all_keys = set()
for item in data["resultData"]:
    all_keys |= item.keys()

在此之后,all_keys将包含所有可能的值,即CSV的所有列。

代码语言:javascript
复制
if "resultData" in data:
    all_keys = set()
    for item in data["resultData"]:
        all_keys |= item.keys()
    for item in data["resultData"]:
            csv_file.writerow([item.get(k) for k in all_keys ])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68662847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档