我有一个简单的python3.6程序,它使用S3库下载AWS文件
import boto3
import json
s3 = boto3.resource('s3')
content_object = s3.Object('my-bucket-name', 'folder1/folder2/emr-config.json')
file_content = content_object.get()['Body'].read().decode('utf-8')
json_content = json.loads(file_content)
print(json_content)但是该程序正在将“JSON文件中使用的双引号”改为“单引号,即当我从AWS管理控制台直接下载该文件时,JSON使用”双引号“,但是当我运行我的程序并输出结果JSON时,它使用‘单引号’。
[{'Properties': {'maximizeResourceAllocation': 'true'}, 'Classification': 'spark'}]对比
[{"Properties": {"maximizeResourceAllocation": "true"}, "Classification": "spark"}]这是我将用于创建EMR集群的配置文件,只有当JSON配置使用“双引号”时,它才能工作。
我想找到一个解决方案,不需要我对整个文件进行查找和替换。有没有办法让我下载“双引号”表格中的文件?
发布于 2018-07-11 18:03:11
如果您只是试图通过Python获取JSON字符串,那么为什么要将它反序列化为一个对象呢?您只需按原样编写file_contents,它将保持为有效的JSON
发布于 2018-07-11 18:00:12
发文来源:json.loads does not keep double quotes intact
首先:引号不是价值的一部分。它们是语法的一部分,向解析器发出定义字符串的信号。
JSON只支持双引号,但在Python中,可以使用单引号或双引号来定义字符串。当回显字符串值时,Python通过向您展示Python语法来重新定义相同的值来反映该值。对于这种表示形式,首选单引号。只有当该值实际包含至少一个单引号而没有双引号时,才会使用双引号:
>>> "Normal strings are reflected with single quotes by Python"
'Normal strings are reflected with single quotes by Python'
>>> 'Single quote: \''
"Single quote: '"
>>> 'Single quote: \', and a double quote: \"'
'Single quote: \', and a double quote: "'你看到的是完全正常的行为。您不能更改这一点;您看到的输出是一个调试工具。如果这是您想要更改的内容,请生成您自己的格式化程序。
当您再次从Python结构生成JSON时,将只使用双引号生成有效的JSON输出:
>>> import json
>>> json_string = '{"created_at": "2012/02/05 04:03:50 -0800"}'
>>> json.loads(json_string)
{u'created_at': u'2012/02/05 04:03:50 -0800'}
>>> json.dumps(json.loads(json_string))
'{"created_at": "2012/02/05 04:03:50 -0800"}'https://stackoverflow.com/questions/51291682
复制相似问题