据我所见,{"a": "b", "a": "c"}
实际上是validJSON 根据RFC 4627 http://www.ietf.org/rfc/rfc4627.txt.
对象结构表示为一对大括号
周围零个或多个名称/值对(或成员)。一个名字是一个
细绳。每个名称后面有一个冒号,用于分隔名称
从价值。单个逗号将值与后面的值分隔开
姓名。对象内的名称SHOULD是独一无二的。
...其中“应该”的意思是:
3. 应该。这个词,或者形容词“推荐”,意思是
在特定情况下可能存在忽略某个问题的正当理由
特定项目,但必须理解其全部含义并
在选择不同的课程之前要仔细权衡。
所以是的,基本上你can这样做,就是legal,但这也是一个坏主意。不同的 JSON 解码器可能会以不同的方式和/或以不良的方式处理这种情况。看看解析器的规范要求:
JSON 解析器将 JSON 文本转换为另一种表示形式。 A
JSON解析器MUST接受所有符合 JSON 语法的文本。
JSON 解析器MAY接受非 JSON 形式或扩展。
一个实现may对文本的大小设置限制
接受。一个实现may设置最大深度限制
筑巢。一个实现may对数字范围设置限制。
一个实现may对长度和字符内容设置限制
字符串。
...但是实现并没有have理智地处理这样的情况。例如:
# Python 2.7
>>> import json
>>> json.JSONDecoder().decode('{"a": "b", "a": "c"}')
`{u'a': u'c'}`
# Chrome 32
> JSON.parse('{"a": "b", "a": "c"}')
Object {a: "c"}
...其他实现可能合法地为您提供(以 Python 表示法):
...或者只是好老鼻恶魔 http://www.catb.org/jargon/html/N/nasal-demons.html。从字面上看,JSON 解析器在这里做的唯一非法的事情就是引发异常。
在生产代码中你最不想做的就是依赖奇怪的副作用。因此,您最不想做的就是行使您的权利来形成名义上合法但实际上无用的 JSON。如果你想这样做,你必须手动完成 - 构建你自己的抽象语法树,你自己的解析器,你自己的生成器,为任何可能想要使用你的数据的人生成的生成器......