【问题标题】:JSON Download Changes " Double Quotes To ' Single QuotesJSON 下载将“双引号”更改为“单引号”
【发布时间】:2018-07-11 17:57:47
【问题描述】:

我有一个简单的 python 3.6 程序,它使用 Boto3 库下载 AWS S3 JSON 文件

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 配置使用“双引号”时才有效。

我想找到一个不涉及我对整个文件进行查找和替换的解决方案。有没有办法让我以“双引号”形式下载文件?

【问题讨论】:

    标签: json python-3.x amazon-s3 boto3


    【解决方案1】:

    来自: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"}'
    

    【讨论】:

      【解决方案2】:

      如果您只是想通过 Python 获取 JSON 字符串,为什么还要将其反序列化为对象呢?您可以按原样编写 file_contents ,它将保持有效的 JSON 格式

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        • 2019-10-04
        • 2014-10-23
        • 2019-05-17
        • 2018-08-19
        • 2021-09-03
        相关资源
        最近更新 更多