如何防止jQuery的$ .getJSON将我的ajax响应键从字符串转换为整数?

tom*_*ods 4 javascript arrays ajax jquery

我正在尝试使用通过电子邮件排序的JSON响应对象来填充选择框,但JQuery似乎正在将键的类型从文本更改为整数,因此通过现在的数字索引重新排序响应对象,搞砸了选择框的顺序.

所以json的反应如下:

{"2":"aaron@mail.com","1":"bernard@mail.com"}
Run Code Online (Sandbox Code Playgroud)

在代码类似于:

$.getJSON('urlwithjsonresponse.com',function(response){
    console.log(response);
});
Run Code Online (Sandbox Code Playgroud)

输出这样的对象:

{1:"bernard@mail.com",2:"aaron@mail.com"}
Run Code Online (Sandbox Code Playgroud)

如何防止此转换/重新排序?

Ps也会出现$ .ajax

Ili*_*a G 5

这里有两件事是错的.

1)JSON密钥总是字符串.仅仅因为它是没有引号而写的并不是一个数字.它只是意味着密钥名称是"安全的",即不包含空格或其他特殊字符.

2)绝对不能保证JSON散列密钥具有任何特定顺序.如果你期待它们,那么你的期望是错误的.您应该将数据序列化为对象(或字符串)数组,而不是单个哈希对象.

["bernard@mail.com","aaron@mail.com"]

要么

[{key:1,value:"bernard@mail.com"},{key:2, value:"aaron@mail.com"}]

实际上做了三件事

3)你看到的输出与jQuery无关.这就是console.log()你给它的序列化哈希对象的方式.哪个有效(见#2).