在javascript的树状视图中显示嵌套的json数据
我有嵌套的json数据。我使用了打击功能在javascript的树状视图中显示嵌套的json数据,javascript,json,nested,Javascript,Json,Nested,我有嵌套的json数据。我使用了打击功能 var jsonSource={"error_code":0, "ext_info":{"name":{"firstName":"John","lastName":"Jonson","nickName":"JJ"}}}; var obj=JSON.parse(jsonSource),returnValue; function showJson(obj){ for(var key in obj){ if(typeof ob
var jsonSource={"error_code":0, "ext_info":{"name":{"firstName":"John","lastName":"Jonson","nickName":"JJ"}}};
var obj=JSON.parse(jsonSource),returnValue;
function showJson(obj){
for(var key in obj){
if(typeof obj[key]==='object'){
returnValue+='<div>'+key+'/\n';
showJson(obj[key]);
returnValue+='</div>';
} else{
returnValue+=key+'equal'+obj[key];
}
}
docoument.getElementById('data').innerHTML=returnValue;
}
var jsonSource={“error_code”:0,“ext_info”:{“name”:{“firstName”:“John”,“lastName”:“Jonson”,“昵称”:“JJ”}};
var obj=JSON.parse(jsonSource),returnValue;
函数showJson(obj){
for(obj中的var键){
如果(对象的类型[键]='object'){
returnValue+=''+键+'/\n';
showJson(obj[key]);
返回值+='';
}否则{
returnValue+=key+'equal'+obj[key];
}
}
getElementById('data').innerHTML=returnValue;
}
如前所述,我有一个大型嵌套的json数据,当我将其解析为showJson函数时,它只显示一级json数据,而将其他深层的dataJson数据置为未定义状态。
我应该如何解决该问题?//obj是要循环的对象,ul是要附加lis的ul
// obj is the object to loop, ul is the ul to append lis to
function loop(obj, ul) {
$.each(obj, function(key, val) {
if(val && typeof val === "object") { // object, call recursively
var ul2 = $("<ul>").appendTo(
$("<li>").appendTo(ul)
);
loop(val, ul2);
} else {
$("<li>").text(val).appendTo(ul);
}
});
}
var ul = $("<ul>");
var jsonSource={"error_code":0, "ext_info":{"name":{"firstName":"John","lastName":"Jonson","nickName":"JJ"}}};
var data=JSON.parse(jsonSource)
loop(data, ul);
ul.addClass("my-new-list").appendTo('body');
功能回路(obj、ul){
$。每个(对象、功能(键、值){
如果(val&&typeof val==“object”){//object,则递归调用
变量ul2=$(“”)。附录(
$(“- ”)。附录(ul)
);
环路(val,ul2);
}否则{
$(“
- ”).text(val).appendTo(ul);
}
});
}
var ul=$(“
”);
var jsonSource={“error_code”:0,“ext_info”:{“name”:{“firstName”:“John”,“lastName”:“Jonson”,“昵称”:“JJ”}};
var data=JSON.parse(jsonSource)
回路(数据,ul);
ul.addClass(“我的新列表”)。附录(“正文”);
您的一些问题:
已经是一个对象jsonSource
- 在每次调用
showJson
var obj={“error_code”:0,“ext_info”:{“name”:{“firstName”:“John”,“lastName”:“Jonson”,“昵称”:“JJ”}};
函数showObj(obj){
返回Object.keys(obj.map)(函数(k){
if(对象的类型[k]=“对象”){
返回k+':
'+showObj(obj[k])+';
}
返回k+':'+obj[k];
}).加入(“
”);
}
document.getElementById('data').innerHTML=showObj(obj)代码>
当使用实际返回值时,递归方法更直观。看看
var jsonSource='{“error_code”:0,“ext_info”:{“name”:{“firstName”:“John”,“lastName”:“Jonson”,“昵称”:“JJ”}};
var obj=JSON.parse(jsonSource);
函数showJson(obj){
var返回值=“”;
for(obj中的var键){
如果(对象的类型[键]='object'){
returnValue+=''+键+'/\n';
returnValue+=showJson(obj[key]);
返回值+='';
}否则{
returnValue+=key+'equal'+obj[key];
}
}
返回值;
}
document.getElementById('data').innerHTML=showJson(obj);
此外:
jsonSource
应该是一个字符串,可以作为JSON数据进行适当的分析
- 在
docoument.getElementById('data')中输入错误。innerHTML=returnValue代码>
您应该退房,非常感谢。我不明白你代码中的那部分:“。。。。。else{$(',{id:key}).text(val).appendTo(ul);我的意思是{id:key}。这是什么?还有一个问题。如果我保存数据的特定部分,例如firstName,我应该怎么做?是的,你可以忽略它(我已经编辑了答案)。不过我没有得到问题的第二部分。你能更具体一点吗
var jsonSource='{"error_code":0, "ext_info":{"name":{"firstName":"John","lastName":"Jonson","nickName":"JJ"}}}';
var obj=JSON.parse(jsonSource);
function showJson(obj){
var returnValue='';
for(var key in obj){
if(typeof obj[key]==='object'){
returnValue+='<div>'+key+'/\n';
returnValue+=showJson(obj[key]);
returnValue+='</div>';
} else{
returnValue+=key+'equal'+obj[key];
}
}
return returnValue;
}
document.getElementById('data').innerHTML= showJson(obj);