将多维的JSON转换为JavaScript数组

3
我想把Json数据转换成Javascript数组,以便像使用array[0][0]一样访问,有人可以帮我吗?
[
    {
        "Login": "test1",
        "Nom": "test1",
        "Prenom": "test1p",
        "password": "124564",
        "Email": "test1@gmail.com"
    },
    {
        "Login": "test2",
        "Nom": "test2",
        "Prenom": "test2p",
        "password": "124564",
        "Email": "test2@gmail.com"
    }
]

我尝试了这段代码,但没有任何反应,我无法访问数组中特定的数据(例如我想要得到“Nom”),使用array[0][1]的方式。

Code.js

var data = [
    {
        "Login": "test1",
        "Nom": "test1",
        "Prenom": "test1p",
        "password": "1267846",
        "Email": "test1@gmail.com"
    },
    {
        "Login": "test2",
        "Nom": "test2",
        "Prenom": "test2p",
        "password": "124494",
        "Email": "test2@gmail.com"
    }
];

function data_to_array(data) {
    var array = [];
    for (var key in data) {
        var value = data[key];
        if (typeof value === 'string') {
            array[key] = value;
        } else {
            array[key] = data_to_array(value);
        }
    }
    return array;
}

var array = data_to_array(data);
for(var i in array)
    console.log(array[i]);   

一旦解析完成,如果我尝试使用myArr [0] [1]访问它,它将显示为未定义。


你肯定做错了。永远不要在数组中使用 for..in。期望的输出是什么? - thefourtheye
为什么不简单地使用 for (var i=0,...... - Satpal
但是 data 不是 JSON 格式,它本身就是一个数组。你在这里想要实现什么? - CodingIntrigue
2个回答

1
var arr = [];

for (var i=0, len=data.length, tmp; i<len; i++) {
  tmp = [];
  for (var k in data[i]) {
    if (data[i].hasOwnProperty(k)) {
      tmp.push(data[i][k]);
    }
  }
  arr.push(tmp);
}

arr;
// [
//   ["test1","test1","test1p","124564","test1@gmail.com"],
//   ["test2","test2","test2p","124564","test2@gmail.com"]
// ]

如果您可以依赖于es5函数,您可以使用Array.prototype.map和Object.keys。
var arr = data.map(function(e) {
  return Object.keys(e).map(function(k) { return e[k]; });
});

arr;
// [
//   ["test1","test1","test1p","124564","test1@gmail.com"],
//   ["test2","test2","test2p","124564","test2@gmail.com"]
// ]

非常感谢,你救了我的命:D - Guest Guest

0

你混淆了数组和对象。所有的数组都是对象,但不是所有的对象都是数组。你在包含对象的数组上错误地使用了“for..in”循环。 如果你添加更多的控制台语句并检查,你就可以理解它是如何工作的。让我为你的情况提供所需的解决方案。

var data = [
    {
        "Login": "test1",
        "Nom": "test1",
        "Prenom": "test1p",
        "password": "1267846",
        "Email": "test1@gmail.com"
    },
    {
        "Login": "test2",
        "Nom": "test2",
        "Prenom": "test2p",
        "password": "124494",
        "Email": "test2@gmail.com"
    }
];

function data_to_array(data) {
    var array = [];
    for (var i=0;i<data.length;i++) {
        var obj = data[i];
        array[i] = new Array();
        for(var key in obj) {
            array[i].push(obj[key]);
        }
    }
    return array;
}

var array = data_to_array(data);
console.log(array);

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