如何将boto3输出保存为JSON文件并解决解析及u前缀问题
解决boto3输出JSON文件带u前缀及解析报错问题
嘿,这个问题我之前也碰到过,来给你捋清楚怎么搞定!
问题根源
你现在的写法是用print response把boto3返回的Python字典直接输出到文件,这其实输出的是Python对象的字符串表示(repr格式),不是标准的JSON:
- 在Python 2里,unicode类型的字符串会显示为
u'xxx',这完全不符合JSON的语法规范; - 这种格式的内容用
json.load解析时,自然会抛出语法错误,因为JSON不认u前缀,也不认可Python式的字典写法。
正确解决方案
别用sys.stdout重定向+print这种方式,直接用Python的json模块把response序列化成标准JSON写入文件,一步到位:
修改后的完整代码:
#!/bin/python import boto3 import json client = boto3.client('iam') response = client.get_account_authorization_details() # 用json.dump直接生成标准JSON文件 with open('output.json', 'w') as output_file: json.dump(response, output_file, indent=2) # indent参数可选,让JSON更易读
为什么这样可行?
json.dump会自动把Python的字典/列表转换成严格符合JSON规范的字符串,自动处理unicode类型,不会出现u前缀;- 使用
with open语句能自动管理文件的打开和关闭,比手动修改sys.stdout更安全、更符合Python的最佳实践。
验证解析
之后用你原来的解析代码就能正常读取了:
with open('output.json') as file: data = json.load(file)
内容的提问来源于stack exchange,提问作者Milister
相关产品推荐
相关产品推荐

