javascript – 如何使用重复键动态生成JSON对象?

前端之家收集整理的这篇文章主要介绍了javascript – 如何使用重复键动态生成JSON对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这听起来是不可能的,但我的老板告诉我,我必须通过 AJAX发送一个 JSON,而jQuery必须具有重复键.问题是如果我写这样的话:
$.post("someurl",{
     "key1" : "value1","key2" : "value2","key2" : "value3","key2" : "value4","key3" : "value5"
});

,jQuery将发送请求

someurl?key1=value1&key2=value4&key3=value5

所有这一切,因为Javascript覆盖具有相同名称属性. JSON对象是动态生成的,我不允许在其中使用数组.有人可以告诉我如何生成JSON对象dinamicaly和重复键?

我真的很感激你的帮助!

解决方法

从我可以看到,{“a”:“b”,“a”:“c”}实际上是根据 RFC 4627有效的JSON.

An object structure is represented as a pair of curly brackets
surrounding zero or more name/value pairs (or members). A name is a
string. A single colon comes after each name,separating the name
from the value. A single comma separates a value from a following
name. The names within an object SHOULD be unique.

…应该说:

3. SHOULD. This word,or the adjective “RECOMMENDED”,mean that there
may exist valid reasons in particular circumstances to ignore a
particular item,but the full implications must be understood and
carefully weighed before choosing a different course.

那么是的,基本上你可以做到这一点,这是合法的,但这也是一个坏主意.不同的JSON解码器可能会以不同的方式处理这种情况和/或以不可取的方式.看看规范要求的解析器​​:

A JSON parser transforms a JSON text into another representation. A
JSON parser MUST accept all texts that conform to the JSON grammar.
A JSON parser MAY accept non-JSON forms or extensions.

An implementation may set limits on the size of texts that it
accepts. An implementation may set limits on the maximum depth of
nesting. An implementation may set limits on the range of numbers.
An implementation may set limits on the length and character contents
of strings.

…但一个实现不一定要像这样的情况下处理.例如:

# 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

>

"your JSON is bad and you should feel bad"

…或者只是好的老nasal daemons.字面上,JSON解析器在这里做的唯一的非法事情是引发异常.

在制作代码中最后一件事就是依靠奇怪的一面.所以你最后要做的就是行使你的名义上合法但实际上无用的JSON的权利.如果你想这样做,你必须手工创建你自己的抽象语法树,你自己的解析器,你自己的生成器,任何人谁可能想要消耗你的数据的生成器…

猜你在找的JavaScript相关文章