我基本上需要做的是,给出一个类似
的json{
"1" : "a",
"7" : "something"
"3" : {
"1" : "blah"
}
}
将这些转换为数组(比如x)。
x[1] = "a"
x[7] = "something"
x[3] = y (where y[1] = "blah")
答案 0 :(得分:0)
您需要将JSON反序列化为非数组对象图,然后将属性复制到数组中。我不知道它的任何捷径。
将JSON反序列化为obj
后的基本循环大致是:
var ar;
var key;
ar = [];
for (key in obj) {
if (obj.hasOwnProperty(key)) {
ar[key] = obj[key];
}
}
...除了你必须检测obj[key]
是一个对象并递归,我将留给读者作为练习。
请注意,在JavaScript中,arrays aren't really arrays。根据您的使用情况,您可能根本不需要从对象转换为Array
。
答案 1 :(得分:0)
我很确定在Javascript中,您可以访问:
x = {
"1" : "a",
"7" : "something",
"3" : {
"1" : "blah"
}
}
像这样:
alert( x["1"] );
应警告“a”。正如人们在上面的评论中已经提到的那样,JS中的数组已经是一个“对象”,并且以这两种不同的方式访问它们之间没有区别。
编辑:
是的,我只是测试了它,它的工作原理。另外,我试过这个:
alert( x[1] );
也就是说,我尝试使用“数字”1,而不是“字符串”“1”。它仍然奏效。是的,这是一种非常奇怪的编程语言。
答案 2 :(得分:0)
我认为这非常接近:
function parse_obj(obj)
{
var array = [];
var prop;
for (prop in obj)
{
if (obj.hasOwnProperty(prop))
{
var key = parseInt(prop, 10);
var value = obj[prop];
if (typeof value === "object")
{
value = parse_obj(value);
}
array[key] = value;
}
}
return array;
}
答案 3 :(得分:0)
这对我有用:
var obj = JSON.parse('{"1":"a","7":"something","3":{"1":"blah"}}');
var keys = Object.keys(obj).sort();
// Make obj look like it's an array by taking the highest value
// key and using it to give obj a length property.
obj.length = parseInt( keys[keys.length] ) + 1;
var arr = Array.prototype.slice.call(obj, 0);
arr现在看起来像这样:
[undefined, "a", undefined, Object, undefined, undefined, undefined, "something"]
好的,所以它没有将'内部'JSON对象转换为数组,但是快速递归循环执行与上面相同的操作应该将其排序。