如何解析JSON并将其转换为多维数组?

时间:2016-01-13 08:25:30

标签: jquery arrays multidimensional-array

我有多个JSON数据,如

var resultJSON = 
   '{"l":"1","p":"1","name":"john"},
    {"l":"1","p":"2","name":"john1"},
    {"l":"1","p":"2","name":"john2"}';

所以现在,

我想使用jquery

生成多维数组
resultJSON.each(function(){
var result = $.parseJSON(resultJSON);
    obj[1][1] = array("john");

}

如何生成多维数组,如果数组有公共键,则附加名称?

OUTPUT将是:

 obj[1][1] = array("john");
 obj[1][2] = array("john1","john2");

2 个答案:

答案 0 :(得分:2)

var src=[{"l":"1","p":"1","name":"john"},
         {"l":"1","p":"2","name":"john1"},
         {"l":"1","p":"2","name":"john2"}];

var obj={};
$.each(src,function(i,v){
  if (!obj[v.l]) {obj[v.l]={};obj[v.l][v.p]=[v.name]}
  else if (!obj[v.l][v.p]) obj[v.l][v.p]=[v.name]
  else obj[v.l][v.p].push(v.name);
})

这里唯一的jquery元素是$.each()方法,您甚至可以用Array方法.forEach()替换(必须更改匿名函数参数的顺序)。

答案 1 :(得分:2)

首先,你的JSON不是一个数组,所以你要加上方括号。

此外,如果值存在并且最终初始化数组并将名称推入其中,则应检查最终数组的每个级别。

var results = $.parseJSON('['+resultJSON+']');
var obj = [];
$.each(results, function(i, res){
    var l = res.l, p = res.p;
    if(!obj[l]) obj[l] = [];
    if(!obj[l][p]) obj[l][p] = [];
    obj[l][p].push(res.name)
});

你可以在这里找到一个片段:

var resultJSON = '{"l":"1","p":"1","name":"john"}, {"l":"1","p":"2","name":"john1"},{"l":"1","p":"2","name":"john2"}';

var results = $.parseJSON('['+resultJSON+']');
var obj = [];
$.each(results, function(i, res){
    var l = res.l, p = res.p;
    if(!obj[l]) obj[l] = [];
    if(!obj[l][p]) obj[l][p] = [];
    obj[l][p].push(res.name)
});

$('#output1').text(JSON.stringify(obj));
$('#output2').text(JSON.stringify(obj[1][2]));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<output id="output1"></output>
<br>
<output id="output2"></output>

修改

替代方式:

var obj = {};
$.each(results, function(i, res){
  var l = res.l, p = res.p;
  if(!obj[l]) obj[l] = {};
  if(!obj[l][p]) obj[l][p] = [];
  obj[l][p].push(res.name)
});
//output {"1":{"1":["john"],"2":["john1","john2"]}}