【问题标题】:json.loads does not keep double quotes intact [closed]json.loads 不保持双引号完整[关闭]
【发布时间】:2016-03-04 07:14:44
【问题描述】:

当我使用json.loads 时,它会将双引号转换为单引号。 这让我很困扰,有人可以帮忙澄清一下吗?

>>> import simplesjson as json
>>> string = '{"created_at": "2012/02/05 04:03:50 -0800"}'
>>> json.loads(string,'utf-8')
{'created_at': '2012/02/05 04:03:50 -0800'}

我知道这是一种正常行为,我可以轻松地调整我的代码。但是想想是否可以实现相同的目标?

【问题讨论】:

  • 这是正常行为。 Python 字符串可以使用单引号和双引号。引号不是值的一部分
  • 请记住,这些是内存中的对象,python 向您显示对象的序列化文本版本供人类查看,而不是对象本身。
  • 这在我的应用程序中很重要,这就是我问的原因。无论如何,我本可以调整我的结果。不知道为什么这么多人反对!!!我想你们需要清楚什么类型的问题需要被否决。
  • 如果引用有效果,请解释原因,否则这里没有问题。 Python 将单引号和双引号视为可互换的,那么是什么导致了您的问题?
  • 我不知道为什么这被否决了......对于那些期望 Python 符合 JSON 行为和 IMO 的 SO 点的 Python 新手来说,这是一个非常合理的问题。精英态度是怎么回事??我必须将此 json 数据从 python 服务器发送到其他需要 JSON 标准的应用程序,这种行为显然不符合要求。

标签: python json string


【解决方案1】:

首先:引号不是值的一部分。它们是语法的一部分,向解析器发出一个字符串已定义的信号。

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"}'

【讨论】:

  • 我明白你在上面的话。通过 python SDK 向 MongoDB 插入数据,数据需要是 dict 格式。但是在引号上方插入 json.loads 时会产生错误(如我的情况)。我可以稍微调整一下我的过程,但我想问问它是否可以完成
  • @Shrey:PyMongo 让您可以使用原生 Python 类型,并为您在 JSON 之间进行编码。您永远不必在那里使用json.loads()
  • @Martijn Pieters 我也应该使用与 Shrey 相同的结构。将 json 作为单引号发送到 ElasticSearch 时出错。我该如何解决?
  • @horoyoio Elasticsearch 不是 PyMongo,Shrey 没有同样的问题。单引号不是 JSON 语法的一部分。将您的字典发送到 Elasticsearch 时将其重新编码为 JSON。
猜你喜欢
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2018-04-17
  • 2016-04-04
  • 2018-01-30
  • 2010-09-08
  • 2010-09-28
  • 2021-02-07
相关资源
最近更新 更多