2015-04-06 85 views
0

我给出了一个包含可变数量对象的json文件,所有这些都是不同的。动态显示JSON文件内容

这是我的JSON文件的一个例子。

{ 
"DNS": { 
      "Server": MYSERVER01 
      "IP": "XXX.XXX.XXX.XXX" 
     }, 
"TST": { 
      "SubKeyCount": 0, 
      "View": 0, 
      "Handle": { 
          "IsInvalid": false, 
          "IsClosed": false 
         }, 
      "ValueCount": 309, 
      "Name": "HKEY_LOCAL_MACHINE\\Software\\TST", 
      "ComputerName": "MYSERVER01", 
      "Hive": -2147483646, 
      "Path": "Software\\TST" 
     }, 
"ServiceNow": null, 
"InstalledSoftware": [ 
          { 
           "Status": true, 
           "Software": [ 
               "Symantec NetBackup 7.5", 
               "Symantec NetBackup Client", 

              ], 
           "Version": [ 
               "0000", 
               "7.5", 
              ] 
          }, 
          { 
           "Status": true, 
           "Software": "Symantec Endpoint Protection", 
           "Version": "12" 
          }, 
          { 
           "Status": true, 
           "Software": "System Center 2012, 
           "Version": "7.0" 
          } 
         ], 
"AutoDuplex": { 
        "Description": "NIC Auto/Auto and Duplexing", 
        "Status": true 
       }, 

"DefaultAdGroups": [ 
         { 
          "Result": true, 
          "Group": "Domain Admins" 
         }, 
         { 
          "Result": true, 
          "Group": "Test-Team" 
         }, 
         { 
          "Result": true, 
          "Group": MYSERVER01-ADMINS" 
         } 
        ] 

}

这仅仅是一个对象,可能是我的JSON文件的屈指可数。

目前我正在做一个ajax调用窗体我的jquery读取文件并发送我的jQuery作为字符串。然后我将数据解析成json格式。

对于如何使用<ul>来整齐显示这些信息,我有点困惑,因为有太多的数组深深地嵌套在文件中。

我也不确定如何动态遍历json文件中的每个对象。在开始之前,我只习惯每个文件看到1个对象。这是一个有点不同,虽然它不是那么容易,因为规定:

var jsonQC = jQuery.parseJSON(result); //result from controller 
jsonQC[1] 
+0

'所有这些都是different'。很难知道什么预期的结果没有一些指导方针 – charlietfl

+0

这是事情,我不知道。任何对象都可以包含比我的示例中显示的更多/更少的信息。这一切都取决于何时读取JSON文件。 – Johnrad

回答

1

如何使用DL/DT/DD?

function makeDom(obj) { 
    var $dl = $("<dl/>"); 
    $.each(obj, function(name, val) { 
     $("<dt>").text(name).appendTo($dl); 
     var $dd = $("<dd>"); 
     if(val && typeof val === "object") { 
      $dd.append(makeDom(val)); 
     } else { 
      $dd.text(val); 
     } 
     $dd.appendTo($dl); 
    }); 
    return $dl; 
} 

var obj = { 
"DNS": { 
      "Server": "MYSERVER01", 
      "IP": "XXX.XXX.XXX.XXX" 
     }, 
"TST": { 
      "SubKeyCount": 0, 
      "View": 0, 
      "Handle": { 
          "IsInvalid": false, 
          "IsClosed": false 
         }, 
      "ValueCount": 309, 
      "Name": "HKEY_LOCAL_MACHINE\\Software\\TST", 
      "ComputerName": "MYSERVER01", 
      "Hive": -2147483646, 
      "Path": "Software\\TST" 
     }, 
"ServiceNow": null, 
"InstalledSoftware": [ 
          { 
           "Status": true, 
           "Software": [ 
               "Symantec NetBackup 7.5", 
               "Symantec NetBackup Client", 

              ], 
           "Version": [ 
               "0000", 
               "7.5", 
              ] 
          }, 
          { 
           "Status": true, 
           "Software": "Symantec Endpoint Protection", 
           "Version": "12" 
          }, 
          { 
           "Status": true, 
           "Software": "System Center 2012", 
           "Version": "7.0" 
          } 
         ], 
"AutoDuplex": { 
        "Description": "NIC Auto/Auto and Duplexing", 
        "Status": true 
       }, 

"DefaultAdGroups": [ 
         { 
          "Result": true, 
          "Group": "Domain Admins" 
         }, 
         { 
          "Result": true, 
          "Group": "Test-Team" 
         }, 
         { 
          "Result": true, 
          "Group": "MYSERVER01-ADMINS" 
         } 
        ] 
}; 

$(function() { 
    makeDom(obj).appendTo("body"); 
}); 

小提琴这里:http://jsfiddle.net/robbyn/0u21ewon/

+0

这真是太棒了,正是我所寻找的逻辑。唯一让我失望的是当一个JSON对象连接多个数组时。使用这种方法,标题显示一个“0”或“1”,你认为解决这个问题的最好方法是什么? – Johnrad

+0

一个数组是一个对象,有几种方法来测试一个对象是否是一个数组:http://stackoverflow.com/questions/4775722/check-if-object-is-array其中之一是测试一个“长度“属性。 –