我知道这听起来是不可能的,但是我的老板告诉我,我必须通过jQuery的AJAX发布调用发送JSON,并且必须具有重复的键。问题是,如果我写这样的话:
$.post("someurl", { "key1" : "value1", "key2" : "value2", "key2" : "value3", "key2" : "value4", "key3" : "value5" });
,jQuery会将请求发送为
someurl?key1=value1&key2=value4&key3=value5
所有这些都是因为Javascript会覆盖具有相同名称的属性。JSON对象是动态生成的,不允许在其中使用数组。有人可以告诉我如何生成具有重复键的JSON对象吗?
非常感谢您的帮助!
据我所知,{"a": "b", "a": "c"}实际上是根据RFC 4627的 有效 JSON 。
{"a": "b", "a": "c"}
对象结构表示为一对大括号,包围着零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。对象中的名称 应 唯一。
…其中应表示:
3.应该。这个词,或形容词“推荐”,意味着在特定情况下可能存在忽略特定项目的正当理由,但是在选择其他课程之前,必须理解并仔细权衡所有含义。
是的,基本上 可以 做到,这是 合法的 ,但这也是一个坏主意。不同的JSON解码器可能会以不同的方式和/或以不希望的方式处理这种情况。查看规范对解析器的要求:
JSON解析器将JSON文本转换为另一种表示形式。JSON解析器 必须 接受所有符合JSON语法的文本。JSON解析器 可以 接受非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。如果要执行此操作,则必须手动进行- 建立自己的抽象语法树,自己的解析器,自己的生成器,为任何可能想要使用您的数据的人生成器…