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

所以一个JSON响应像:

{"2":"aaron@mail.com","1":"bernard@mail.com"}

在类似于以下代码的代码之后:
$.getJSON('urlwithjsonresponse.com',function(response){
    console.log(response);
});

输出这样的对象:
{1:"bernard@mail.com",2:"aaron@mail.com"}

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

P.s. $ .ajax也会发生这种情况

最佳答案

这里有两件事是错误的。

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)。

10-05 21:06
查看更多