python - 使用 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)
解决方案
writerows() 的参数应该是字典列表,json_response 是字典。我想你的意思是 w.writerows(json_response['entries]) – Barmar 10 分钟前
这行得通!非常感谢,不知道如何投票支持您作为答案。
推荐阅读
- node.js - Nodemailer 使用特定的出站端口
- node.js - 在管理员兄弟中使用现有的 api 和控制器登录
- authentication - 身份验证返回 400 和“出现问题”,但在隐身模式下工作
- php - yii2 - SQLSTATE [23000]:完整性约束违规:1048
- javascript - 如何在javascript图中制作标签范围
- python-3.x - Google colab 一直在下载 Fashion_Mnist 数据集
- c# - EF Core 3.1 到 5 更新 -> IEntityType.GetTableName
- oracle - ORA-01017: Flyway 在 Jenkins 上抛出的用户名/密码无效
- qt - 从 QThread 工作类发出的信号没有到达
- java - 如何使swagger post参数具有默认请求示例