我有多个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");
答案 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"]}}