【问题标题】:Is JSON syntax a strict subset of Python syntax?JSON 语法是 Python 语法的严格子集吗?
【发布时间】:2011-10-01 10:35:46
【问题描述】:

JSON 与 Python 语法非常相似。所有的 JSON 对象都可以直接无误地转换成 Python 吗?

示例

以下是有效的 JSON 对象:

// Valid JSON
{"foo":"bar"}

此对象将直接转换为键为“foo”且值为“bar”的 Python 字典:

# Python
json_dict = eval('{"foo":"bar"}')

【问题讨论】:

  • 给你的问题一个疑问的好处,你能给我一个可能是 python 代码的 JSON 示例吗?
  • @IRegretable:我可以将json.org/example.html 中的示例直接复制并粘贴到Python 解释器中,然后取回一个有效的字典。
  • 我对python不太了解,无法确定,但可能有python对json字符串的解析与json规范不同的情况
  • @James:这个问题与JSON的解析无关,而与它的直接消费有关。
  • 还有ast.literal_eval,比eval安全多了。

标签: javascript python json syntax


【解决方案1】:

没有。特别是,truefalsenull 不是 Python,尽管它们在 Python 中有直接等价物(分别为TrueFalseNone)。

// Valid JSON
{"sky_is_blue":true}

但是在 Python 中使用时...

# Python
>>> json_dict = eval('{"sky_is_blue":true}')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'true' is not defined

【讨论】:

  • +1 很高兴知道。这是不兼容的全部程度,还是 Python 不喜欢许多其他 Javascript 特定的东西?
  • 字符串可能会有点模糊,这取决于您解释规范的方式(或缺乏规范),但这三个是最大的区别。
  • @FogleBird:不,你没有;那不是 JSON。
  • 据我所知,这些是唯一不在 Python 中的 strict JSON 值。 NaNInfinity 之类的值并不是严格意义上的 JSON,但可以在 JSON 字符串中找到(实际上,Python 的 json 模块会使用它们,除非明确告知不要这样做)。
  • @Ignacio:你是对的。我猜人们有时会像 HTML 一样滥用 JSON。
【解决方案2】:

这个问题已经被回答(并且答案被接受),但我想指出truefalsenull不是Python的问题可以通过使用以下代码来解决在评估 JSON 之前:

true = True
false = False
null = None

当然,JSON 解析器更好。

【讨论】:

  • 我想知道这个结合上面FogleBird提到的ast.literal_eval是否可以用来构造一个快速的纯Python JSON解析器。
  • 不是真的,因为变量不是文字,因此是不允许的......尽管在传递给ast.literal_eval 之前可以执行string.replace('true', 'True') 等。当然,这会对{"Quote": "This sentence is false."} 造成不利影响。
  • 一个正则表达式?现在你有两个问题! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多