2017-11-23 17 views
0

私はCSVに変換する必要がある入れ子JSONを持っています。私は最初、単純なJSONに取り組み、それを変換することができました。しかし、これには複雑なネストされたオブジェクトがいくつかあります。以下は、JSONです:Pythonを使用して複合ネストJSONをCSVまたはExcelに変換する

{ 
    "next": "https://api.pro.live/api/v1.0/publisher/pages?api_key=ujwq8aW7MOZ6y40nXhrrqW0OxnIvNJnFzpWOcJaSWHc&format=json&page_number=2", 
    "next_page": 2, 
    "previous": null, 
    "previous_page": null, 
    "count": 8888, 
    "data": [{ 
     "id": "294225", 
     "publisher_id": "here", 
     "name": "Company Page", 
     "publisher_page_id": "", 
     "publisher_page_url": "", 
     "state": "active", 
     "state_description": "", 
     "crawled_at": null, 
     "updated_at": null, 
     "location": { 
      "id": "163238", 
      "name": "Buffard Fabrice", 
      "address": { 
       "address_line1": "Allée de l'Abron", 
       "address_line2": "", 
       "house_number": "5", 
       "city": "Gennetines", 
       "zip_code": "03400", 
       "sublocality": "", 
       "state": "", 
       "country": "FR", 
       "coordinates": { 
        "latitude": 46.6376484, 
        "longitude": 3.4076838 
       } 
      }, 
      "phones": [{ 
       "type": "main", 
       "number": "0470421022", 
       "country_code": "" 
      }, { 
       "type": "mobile", 
       "number": "0662241230", 
       "country_code": "" 
      }], 
      "urls": [{ 
       "type": "website", 
       "url": "http://www.fabrice-buffard.fr", 
       "description": "", 
       "display_url": "" 
      }], 
      "emails": [{ 
       "email": "[email protected]", 
       "type": "contact", 
       "description": "" 
      }], 
      "closed": false, 
      "opening_hours": { 
       "periods": [{ 
        "open_day": "MONDAY", 
        "open_time": "14:00", 
        "close_day": "MONDAY", 
        "close_time": "19:00" 
       }, { 
        "open_day": "TUESDAY", 
        "open_time": "10:00", 
        "close_day": "TUESDAY", 
        "close_time": "12:30" 
       }, { 
        "open_day": "TUESDAY", 
        "open_time": "14:00", 
        "close_day": "TUESDAY", 
        "close_time": "19:00" 
       }, { 
        "open_day": "WEDNESDAY", 
        "open_time": "10:00", 
        "close_day": "WEDNESDAY", 
        "close_time": "12:30" 
       }, { 
        "open_day": "WEDNESDAY", 
        "open_time": "14:00", 
        "close_day": "WEDNESDAY", 
        "close_time": "19:00" 
       }, { 
        "open_day": "THURSDAY", 
        "open_time": "10:00", 
        "close_day": "THURSDAY", 
        "close_time": "12:30" 
       }, { 
        "open_day": "THURSDAY", 
        "open_time": "14:00", 
        "close_day": "THURSDAY", 
        "close_time": "19:00" 
       }, { 
        "open_day": "FRIDAY", 
        "open_time": "10:00", 
        "close_day": "FRIDAY", 
        "close_time": "12:30" 
       }, { 
        "open_day": "FRIDAY", 
        "open_time": "14:00", 
        "close_day": "FRIDAY", 
        "close_time": "19:00" 
       }, { 
        "open_day": "SATURDAY", 
        "open_time": "10:00", 
        "close_day": "SATURDAY", 
        "close_time": "12:30" 
       }] 
      }, 
      "specific_opening_hours": [], 
      "publisher_categories": [{ 
       "name": "Photographer", 
       "id": "gcid:photographer" 
      }] 
     } 
    }] 
} 

私は上記のJSONからオブジェクトの数を抽出することができたが、それは複雑な入れ子構造に来るとき、それは困難になります。私は一般的なコンバータを開発するために助けが必要です。そのため、ある構造がフィールドを逃した場合、それは私にエラーを投げるべきではありません。以下は

一つの構造がフィールドをミスするとき、あなたの助けを事前に

x["data"][numbers]["id"], 
       x["data"][numbers]["publisher_id"], 
       x["data"][numbers]["name"], 
       x["data"][numbers]["publisher_page_id"], 
       x["data"][numbers]["publisher_page_url"], 
       x["data"][numbers]["state"], 
       x["data"][numbers]["state_description"], 
       x["data"][numbers]["crawled_at"], 
       x["data"][numbers]["updated_at"] 

おかげで、私は個別に各オブジェクトを抽出したが動作しません、私のコードの一部です!

答えて

0

はキーが辞書に存在しない場合にはNoneを返します。この代わりに

x["data"][numbers].get("id"), 
x["data"][numbers].get("publisher_id"), 
... 

に.get(...)を試してみてください。別のデフォルトを返す場合は、.get(key、default)を使用してください。

関連する問題