Raz*_*aru 10 javascript ajax jquery json
我知道这听起来不可能,但是我的老板告诉我,我必须通过一个带有jQuery的AJAX post调用发送一个JSON,它必须有重复键.问题是,如果我写这样的东西:
$.post("someurl", {
"key1" : "value1",
"key2" : "value2",
"key2" : "value3",
"key2" : "value4",
"key3" : "value5"
});
Run Code Online (Sandbox Code Playgroud)
,jQuery将发送请求为
someurl?key1=value1&key2=value4&key3=value5
Run Code Online (Sandbox Code Playgroud)
这一切都是因为Javascript会覆盖具有相同名称的属性.JSON对象是动态生成的,我不允许在其中使用数组.有人能告诉我如何生成JSON对象dinamicaly和重复键?
我真的很感谢你的任何帮助!
bad*_*adp 16
根据我所看到的,根据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"}
Run Code Online (Sandbox Code Playgroud)
...和其他实现可能合法地给你(用Python表示法):
{"a": "b"}
[("a", "b"), ("a", "c")]
[("a", ["b", "c"])]
[]
42
"your JSON is bad and you should feel bad"
......或者只是好老的鼻子守护进程.从字面上看,JSON解析器在这里做的唯一非法事情是引发异常.
您想要在生产代码中做的最后一件事就是依赖于奇怪的边案例.所以你要做的最后一件事是行使你的权利,形成名义上合法但实际上无用的JSON.如果你想这样做,你必须手工完成 - 为任何可能想要使用你的数据的人建立你自己的抽象语法树,你自己的解析器,你自己的生成器,生成器......
归档时间: |
|
查看次数: |
14491 次 |
最近记录: |