Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从JSON解析一个数组,其中每个字段键都是一个数字_Javascript_Arrays_Json - Fatal编程技术网

Javascript 从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(

我基本上需要做的是,给定一个类似json的

{
  "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 id
760941020008375486468
,在这种情况下,除非在数字前面添加一个字母,否则它不起作用。
[undefined, "a", undefined, Object, undefined, undefined, undefined, "something"]