2016-07-31 69 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/)如何为灵感启发 –

相关问题