在javascript的树状视图中显示嵌套的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

我有嵌套的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 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);