2016-07-31 57 views
0

這JSON到CSV代碼示例是偉大的工作:解析JSON到CSV與Python - AttributeError的:「海峽」對象有沒有屬性「鑰匙」

employee_data = '{"info":[{"employee_name": "James", "email": "[email protected]", "job_profile": "Sr. Developer"},{"employee_name": "Smith", "email": "[email protected]", "job_profile": "Project Lead"}]}' 

#This can be parsed and converted to CSV using python as shown below: 
import json 
import csv 

employee_parsed = json.loads(employee_data) 

emp_data = employee_parsed['info'] 

# open a file for writing 

employ_data = open('Employee.csv', 'w') 

# create the csv writer object 

csvwriter = csv.writer(employ_data) 

count = 0 

for emp in emp_data: 

     if count == 0: 

      header = emp.keys() 

      csvwriter.writerow([header]) 

      count += 1 

     csvwriter.writerow([emp.values()]) 

employ_data.close() 

我的麻煩來當我試圖使用下面的JSON數據如下...

我得到一個AttributeError:'str'對象沒有屬性'keys'。請保持你的迴應簡單,因爲這是我的Python「Hello World」。 :-)

employee_data = '{"info": {"arch": "x86_64","platform": "linux"},"packages": {"_license-1.1-py27_0.tar.bz2": {"build": "py27_0","build_number": 0,"date": "2013-03-01","depends": ["python 2.7*"],"license": "proprietary - Continuum Analytics, Inc.","license_family": "Proprietary","md5": "5b13c8cd498ce15b76371ed85278e3a4","name": "_license","requires": [],"size": 194947,"version": "1.1"}}}' 

謝謝你對此的任何指示。

回答

0

問題是,你的代碼期望JSON鍵是數組。此循環如下:

for emp in emp_data: 

期望每個頂級JSON密鑰都是可迭代的(可循環的)。在原來的JSON,關鍵info映射到一個列表:

[{"employee_name": "James", "email (...) 

然而,在第二JSON例如ìnfo`鍵沒有映射到一個列表,而是要一本字典:

"info": {"arch": "x86_64","platform": "linux"} 

更改info鍵列表修復它:

"info": [{"arch": "x86_64","platform": "linux"}] 

在進一步深入,你emp_data變量是這樣的:

{'platform': 'linux', 'arch': 'x86_64'} 

所以,當你重複它(for emp in emp_data),emp"arch""platform",你不能從中獲取.keys()

+0

謝謝大衛。這很有幫助,雖然我知道括號是可能的原因,但我不知道爲什麼沒有你的解釋。 – Lou

+0

如果我無法控制源JSON文件會怎麼樣? http://repo.continuum.io/pkgs/free/linux-64/repodata.json – Lou

+0

然後,你應該嘗試寫一個更通用的JSON到CSV轉換器。嘗試瞭解[本網站](https://konklone.io/json/)如何爲靈感啓發 –

相關問題