据我所知,
{"a": "b", "a": "c"}实际上是根据RFC4627的 有效 JSON
。
对象结构表示为一对大括号,包围着零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。对象中的名称
应 唯一。
…其中应表示:
3.应该。这个词,或形容词“推荐”,意味着在特定情况下可能存在忽略特定项目的正当理由,但是在选择其他课程之前,必须理解并仔细权衡所有含义。
是的,基本上 可以 做到,这是 合法的
,但这也是一个坏主意。不同的JSON解码器可能会以不同的方式和/或以不希望的方式处理这种情况。查看规范对解析器的要求:
JSON解析器将JSON文本转换为另一种表示形式。JSON解析器 必须 接受所有符合JSON语法的文本。JSON解析器 可以
接受非JSON形式或扩展名。一个实现 可以 对其接受的文本大小设置限制。一种实现 可以 对最大嵌套深度设置限制。一个实现 可以 对数字范围设置限制。一个实现
可以 对字符串的长度和字符内容设置限制。
…但实现不 具有 到三立处理这种情况。例如:
# Python 2.7>>> import json>>> json.JSonDeprer().depre('{"a": "b", "a": "c"}')`{u'a': u'c'}`# Chrome 32> JSON.parse('{"a": "b", "a": "c"}')Object {a: "c"}…以及其他实现可能会合法地给您(以Python表示法):
{“ a”:“ b”}
[(“ a”,“ b”),(“ a”,“ c”)]
[(“ a”,[“ b”,“ c”])]
[]
42
“您的JSON不好,您应该感到难受”
…或者只是好的旧式鼻部守护程序。从字面上看,JSON解析器在这里所做的唯一非法的事情就是引发异常。
您在生产代码中要做的最后一件事是依靠怪异的情况。因此,您要做的最后一件事是行使您的权利,以形成名义上合法但实际上无用的JSON。如果要执行此操作,则必须手动进行-
建立自己的抽象语法树,自己的解析器,自己的生成器,为任何可能想要使用您的数据的人生成器…



