【问题标题】:In Python, why should one use JSON scheme instead of a dictionary? [closed]在 Python 中,为什么要使用 JSON 方案而不是字典? [关闭]
【发布时间】:2016-01-15 03:26:08
【问题描述】:

(这是对原始问题的编辑)“Python 字典和 JSON 有什么区别?” “需要清晰”对我来说,这是非常清晰和合乎逻辑的!无论如何,这是一个“改进”它的尝试......


将 Python 字典转换为 JSON 有什么好处,除了在不同平台和语言之间的可转移性?看下面的例子:

d = {'a':111, 'b':222, 'c':333}
print('Dictionary:', d)
j = json.dumps(d, indent=4)
print('JSON:\n%s' % j)

输出:

Dictionary: {'a': 111, 'b': 222, 'c': 333}
JSON:
{
    "a": 111,
    "b": 222,
    "c": 333
}

它们几乎相同。那么,为什么要使用 JSON?

【问题讨论】:

  • 如果你有一个在 python 中使用的 python dict,如果你不需要,将它转换成另一种语言的格式似乎是不必要的工作。
  • 您的意思是要将 JSON 存储在某些文件中,还是只是在一个程序中将 dicts 作为 JSON 传递?没有理由做后者。
  • JSON 是数据交换格式。当您需要使数据在外部可用时转换为它。在内部使用它与在字符串中存储数字一样有意义。
  • 是的,这就是我的想法,在单个程序中这似乎是一个不必要的步骤。我想我不确定您会在什么时候选择将数据转换为 JSON,但将其理解为 exchange 格式 会更清楚。谢谢。
  • J.F.塞巴斯蒂安怎么说。因此,您可能想使用 JSON 将该 dict 存储到磁盘,以便您可以在程序的后续运行中将其读回,以便其他程序可以读取该数据。但是,您可以使用 Python pickle 模块来保存这样的数据,并且 pickle 可以处理 JSON 无法处理的事情,OTOH,pickle 是 Python 特定的,而不是人类可读的。

标签: python json


【解决方案1】:

是的,有好处, 使用 json 您可以处理数据并使其看起来很简单, 而不是使用'[' 括号使数据不必要地复杂化

你说得对python字典不好看

我也在我的 python 项目中使用this json wrapper 而不是字典

另外如果你担心性能dictionary vs json那么没有区别。你可以使用json

所以我的代码使用 json 看起来很干净

【讨论】:

  • 这是迄今为止我读过的 Python 中最非 Python 的编码实践。
  • 这个答案实际上是不正确的。 json 通过括号支持数组。 json 和 python dict 是有区别的。它还使用了诸如“糟透了”之类的无用语言,并发表了诸如“使代码看起来很脏”之类的主观陈述,而没有支持该主张。
  • 是的,这个答案将 JSON(一种格式)与 Javascript 中属性访问的工作方式混为一谈。但是,如果有人想要将密钥作为属性访问,pypi.org/project/attrdict 包似乎提供了这个功能。
【解决方案2】:

这是苹果与橘子的比较:JSON 是一种数据格式(字符串),Python 字典是一种数据结构(内存中的对象)。

如果您需要在不同(甚至可能是非 Python)进程之间交换数据,那么您可以使用 JSON 格式序列化您的 Python 字典。

字典的文本表示看起来像(但不是)json格式:

>>> print(dict(zip('abc', range(3))))
{'a': 0, 'b': 1, 'c': 2}

对象的文本表示(字符串)不是对象本身(即使字符串对象和它们的文本表示是不同的东西,例如,"\n" 是单个换行符,但显然它的文本表示是几个字符)。

【讨论】:

  • 表示 vs. 对象本身,这让我感到困惑,JSON 与 python 嵌套字典有何不同。现在说得通了,谢谢!
  • @RMPhoenix:为确保您了解其中的区别,请尝试弄清楚len(json.loads('"\\\\"')) 是什么? (如果你不能马上得到答案,请逐步写下解决方案)。
  • 接受挑战。好的,我对 JSON 没有太多经验,所以我不完全理解这个问题的答案。这是将 JSON 转换为 Python。答案是1,因为这归结为前面的单个`. The ` 会逃脱它。 "\\" 似乎是特定于 json 的,与十六进制有关吗?因此,虽然作为文本表示有 6 个字符,但它最终只计算为 1,其他的就像我猜的上下文管理器,编码/解码信号表示编码的含义。
  • @RMPhoenix:这里的关键词是“双重转义”:反斜杠在 both Python 字符串文字 JSON 文本中是特殊的:它可能更改以下字符的解释方式,例如,Python 源代码中的'"\t"' 是一个用双引号括起来的制表符(单个字符),但'"\\t"' 是用引号括起来的两个字符(反斜杠+t),但反斜杠在 JSON 中是特殊的也因此json.loads('"\\t"') == '\t' 即,我们从Python 源代码(字面量)中的\\t 开始,然后json 解析器看到\t(两个字符),最终产生一个单个 制表符。跨度>
  • 为什么mongodb 说,JSON 对象?但不是 JSON 格式?
猜你喜欢
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多