Javascript 从JSON解析一个数组,其中每个字段键都是一个数字
我基本上需要做的是,给定一个类似json的Javascript 从JSON解析一个数组,其中每个字段键都是一个数字,javascript,arrays,json,Javascript,Arrays,Json,我基本上需要做的是,给定一个类似json的 { "1" : "a", "7" : "something" "3" : { "1" : "blah" } } 将它们转换为数组(例如x) 您需要将JSON反序列化为非数组对象图,然后将属性复制到数组中。我不知道有什么捷径可以走 将JSON反序列化为obj后的基本循环大致如下: var ar; var key; ar = []; for (key in obj) { if (obj.hasOwnProperty(
{
"1" : "a",
"7" : "something"
"3" : {
"1" : "blah"
}
}
将它们转换为数组(例如x)
您需要将JSON反序列化为非数组对象图,然后将属性复制到数组中。我不知道有什么捷径可以走 将JSON反序列化为
obj
后的基本循环大致如下:
var ar;
var key;
ar = [];
for (key in obj) {
if (obj.hasOwnProperty(key)) {
ar[key] = obj[key];
}
}
…除非您必须检测到obj[key]
是一个对象并递归,这将留给读者作为练习
请注意,在JavaScript中。根据您的使用情况,您可能根本不需要执行从对象到
数组的转换。我敢肯定,在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;
}
这对我来说很有用:
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对象转换为数组,但是执行与上面相同操作的快速递归循环应该可以解决这个问题。第0个数组元素是什么?从技术上讲,它不是数组,除非它从零开始。JSON字段键定义元素的索引。将更新示例以明确说明。@Hassan起始索引不相关。有些语言从1开始,有些语言允许任意整数值(ick!)@Hassan数组是一个对象,它根本不需要任何数字成员。尽管除了需要长度(或其他[[prototype]]成员)或进行愚蠢的类型检查之外……大数字存在问题,例如,twitter id760941020008375486468
,在这种情况下,除非在数字前面添加一个字母,否则它不起作用。
[undefined, "a", undefined, Object, undefined, undefined, undefined, "something"]