据我所见,根据RFC 4627{"a": "b", "a": "c"}
实际上是有效的 JSON 。
对象结构表示为一对围绕零个或多个名称/值对(或成员)的花括号。名称是一个字符串。每个名称后面都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。对象中的名称应该是唯一的。
...应该意味着:
3. 应该。这个词或形容词“推荐”意味着在特定情况下可能存在忽略特定项目的正当理由,但在选择不同的课程之前必须理解并仔细权衡全部含义。
所以,是的,基本上你可以这样做,这是合法的,但这也是一个坏主意。不同的 JSON 解码器可能会以不同的方式和/或以不受欢迎的方式处理这种情况。查看规范对解析器的要求:
JSON 解析器将 JSON 文本转换为另一种表示形式。JSON 解析器必须接受所有符合 JSON 语法的文本。JSON 解析器可以接受非 JSON 形式或扩展。
一个实现可以对它接受的文本的大小设置限制。实现可以对最大嵌套深度设置限制。实现可以对数字范围设置限制。实现可以对字符串的长度和字符内容设置限制。
...但是实现不必理智地处理这种情况。例如:
# 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 表示法):
{“a”:“b”}
[("a", "b"), ("a", "c")]
[("a", ["b", "c"])]
[]
42
“你的 JSON 很糟糕,你应该感觉很糟糕”
...或者只是好的旧鼻守护进程。从字面上看,JSON 解析器在这里做的唯一非法的事情就是引发异常。
您最不想在生产代码中做的事情就是依赖奇怪的副案例。因此,您要做的最后一件事是行使形成名义上合法但实际上无用的 JSON 的权利。如果你想这样做,你将不得不手工去做——构建你自己的抽象语法树,你自己的解析器,你自己的生成器,为任何可能想要使用你的数据的人生成生成器......