将JSON数组转换为JavaScript数组

8

我可以帮您将以下json数组转换为普通的JavaScript数组:

这是我的json数组:

var users = {"0":"John","1":"Simon","2":"Randy"}

如何将它转换为一个普通的JavaScript数组,如下所示:
var users = ["John", "Simon", "Randy"]

我也发现这个很有用:https://dev59.com/PG855IYBdhLWcg3wYTP_ - shasi kanth
有人能告诉我这是 JSON 数组还是 JSON 对象吗? - Katty
@anil 这可能会有所帮助:https://dev59.com/vWct5IYBdhLWcg3wLqfw#12289961 - shasi kanth
3个回答

9

users已经是一个JS对象(不是JSON)。但是您可以这样做:

var users_array = [];
for(var i in users) {
    if(users.hasOwnProperty(i) && !isNaN(+i)) {
        users_array[+i] = users[i];
    }
}

编辑:在数组中正确位置插入元素。感谢@RoToRa

也许最好的方法是一开始就不创建这种对象。它是如何创建的?


这个 JSON 数组是使用 Zend_Json::encode 动态创建的,但响应被传回到一个接受普通 JavaScript 数组的 js 函数中。 - shasi kanth
2
@dskanth:如果你没有做什么复杂的操作,可以使用本地函数json_encode。它只会将关联数组转换成JSON对象,将数字索引的数组转换成数组。 - Felix Kling
4
注意,你的代码可能无法将值分配给正确的索引,因为你假设对象属性是按顺序迭代的。if (!isNaN(+i)) {users_array[+i] = users[i]} 可能更好。 - RoToRa
@RoToRa:你说得对。我并没有假设它们已经排序,但是我没有注意到顺序...我会在我的答案中添加这个。 - Felix Kling

4

仅供娱乐 - 如果您知道数组的长度,则以下内容将起作用(似乎更快):

users.length = 3;
users = Array.prototype.slice.call(users);

0

好的,这里有一个Jquery+Javascript的解决方案,对于那些感兴趣的人:

var user_list = [];

$.each( users, function( key, value ) {
    user_list.push( value );    
});

console.log(user_list);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接