我基本上需要做的是,给定一个像
{
"1" : "a",
"7" : "something"
"3" : {
"1" : "blah"
}
}
将这些转换为数组(比如 x)。
x[1] = "a"
x[7] = "something"
x[3] = y (where y[1] = "blah")
我基本上需要做的是,给定一个像
{
"1" : "a",
"7" : "something"
"3" : {
"1" : "blah"
}
}
将这些转换为数组(比如 x)。
x[1] = "a"
x[7] = "something"
x[3] = y (where y[1] = "blah")
这对我有用:
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 对象转换为数组,但是执行与上述相同操作的快速递归循环应该可以解决这个问题。
您需要将 JSON 反序列化为非数组对象图,然后将属性复制到数组中。我不知道它有什么捷径。
将 JSON 反序列化后的基本循环obj
大致是:
var ar;
var key;
ar = [];
for (key in obj) {
if (obj.hasOwnProperty(key)) {
ar[key] = obj[key];
}
}
...除了你必须检测到它obj[key]
是一个对象并递归,我将把它作为练习留给读者。
请注意,在 JavaScript 中,数组并不是真正的数组。根据您的用例,您可能根本不需要进行从对象到的转换Array
。
我很确定在 Javascript 中,您可以访问:
x = {
"1" : "a",
"7" : "something",
"3" : {
"1" : "blah"
}
}
像这样:
alert( x["1"] );
这应该提醒“a”。正如人们在上面的评论中已经提到的那样,JS 中的数组已经是一个“对象”,这两种不同的方式访问它们没有区别。
编辑:
是的,我刚刚测试过它并且它有效。另外,我试过这个:
alert( x[1] );
也就是说,我尝试使用“数字”1,而不是“字符串”“1”。它仍然有效。是的,它是一种非常奇怪的编程语言。
我认为这非常接近:
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;
}