首页 > 解决方案 > 使用 WriteRow 将嵌套 JSON 转换为 CSV -“str”对象没有属性“get”

问题描述

我正在尝试使用 writerows 将 API 响应从 JSON 转换为 CSV。但是它似乎没有抓取值,我怀疑这是由于 DictWriter 没有查看嵌套来抓取我的值对,或者它不知道要抓取哪些键值对。

我希望将字段 1-5 及其值提取到 CSV。

但是,当我提供 API 响应(作为 json_response)时,我返回了以下错误,我不确定为什么将 Dict 传递给 writerows 会导致关于它是字符串的错误。

  File "python-DWS.py", line 116, in <module>
    JSON_to_CSV()
  File "python-DWS.py", line 101, in JSON_to_CSV
    w.writerows(json_response)
  File "/usr/lib/python3.8/csv.py", line 157, in writerows
    return self.writer.writerows(map(self._dict_to_list, rowdicts))
  File "/usr/lib/python3.8/csv.py", line 151, in <genexpr>
    return (rowdict.get(key, self.restval) for key in self.fieldnames)
AttributeError: 'str' object has no attribute 'get'

json_response 是 API 响应,它是一个字典格式,但是我无法将条目嵌套打印到我的 CSV 中:

{'balance': 174, 'entries': [{'id': '20232864065', 'field1': 'email@mail.com', 'field2': '', 'field3': '', 'field4': 'oifasfasfasf', 'field5': '', 'field6': '', 'field7': '', 'field8': ''
, 'field9': '', 'field10': 'player'}, }], 'success': True, 'took': '3µs', 'total': 1}

接受上述响应并尝试转换为 CSV 的脚本药水:

##Converting Response to CSV
def JSON_to_CSV():
    #Get Date for CSV Name
    d = today.strftime("%d-%m-%Y")
    values = [ 'field1', 'field2', 'field3', 'field4', 'field5', 'field6', 'field7' ]

    #Turning JSON to CSV
    with open(customername + '-' + d + '.csv', 'w') as f:
        w = csv.DictWriter(f, fieldnames=values, extrasaction='ignore', delimiter=",")
        w.writeheader()
        print(json_response['entries'][0]['field1']) #prints first field for testing
        w.writerows(json_response)

标签: pythonjson

解决方案


writerows() 的参数应该是字典列表,json_response 是字典。我想你的意思是 w.writerows(json_response['entries]) – Barmar 10 分钟前

这行得通!非常感谢,不知道如何投票支持您作为答案。


推荐阅读