我正在尝试使用通过电子邮件排序的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)。