【问题标题】:Parsing JSON to CSV with Python - AttributeError: 'str' object has no attribute 'keys'使用 Python 将 JSON 解析为 CSV - AttributeError: 'str' object has no attribute 'keys'
【发布时间】:2016-07-31 04:55:25
【问题描述】:

这个 JSON 到 CSV 代码示例运行良好:

employee_data = '{"info":[{"employee_name": "James", "email": "james@gmail.com", "job_profile": "Sr. Developer"},{"employee_name": "Smith", "email": "Smith@gmail.com", "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"}}}'

感谢您对此的任何指导。

【问题讨论】:

    标签: python json csv


    【解决方案1】:

    问题是您的代码期望 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()

    【讨论】:

    • 谢谢大卫。这很有帮助,虽然我知道括号是可能的原因,但没有你的解释我不知道为什么。
    • 如果我对源 JSON 文件没有任何控制权怎么办? repo.continuum.io/pkgs/free/linux-64/repodata.json
    • 然后,您应该尝试编写一个更通用的 JSON 到 CSV 转换器。尝试了解this website 如何激发灵感
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2017-05-10
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多