2016-05-16 107 views
0

我有一個嵌套的JSON對象,我需要經過各級和獲取屬性+對象的名稱,嵌套JSON平HTML表格

這是我期待,

MainObject.Property1 
MainObject.Property2 
MainObject.Property3 
ChildObject1.Property1 
ChildObject1.PropertyN 
ChildsChildObject1.Property1 
ChildsChildObject1.PropertyN 
.. so on.. 

我很新的給JavaScript所以留在我身邊,我試過,但沒有工作,

walker(mainObject); 

    function walker(object) { 
     displayAllProperties(object); 
     digThroughAllObjects(object); 
    } 

    function displayAllProperties(object) { 
     for (var property in object) { 
      var type = typeof object[property]; 
      if (type === 'string' || type === 'number' || type === 'boolean' || object[property] instanceof Date || !object[property]) { 
       console.log(object + " " + property); 
      } 
     } 
    } 

    function digThroughAllObjects(object) { 
     for (var property in object) { 
      if (typeof property === "object") { 
       walker(property); 
      } 
     } 
    } 

更新

我對我的代碼應用了建議,並且它有所改進。

您可以使用此JSON,但對我來說我的代碼有任何JSON的工作..

JSON example

更新2

最新的代碼仍然沒有工作,

function displayAllProperties(object) { 
    for (var property in object) { 
    var type = typeof object[property]; 
    if (type === 'string' || type === 'number' || type === 'boolean' || object[property] instanceof Date || !object[property]) { 
     console.log(object + " " + property); 
    } else if (type === "object") { 
     displayAllProperties(object[property]); 
    } 
    } 
} 

更新3

我在層次樹中獲得JSON回覆,但我需要創建一個平坦的動態表,所以我的第一個任務是獲取所有屬性名稱,以便我可以創建一個列名稱數組並使用它創建動態表。

+0

你能不能提供一個示例JSON? –

+0

許多許多JSON遍歷器的副本 – mplungjan

+0

您從'item'更改爲'value'。除此之外,代碼看起來很好。 –

回答

2

看看你的瀏覽器的JavaScript控制檯應該有一個錯誤信息,告訴你確切的問題

function walker(item) { 
    display(item); 

    if (typeof value === "object") { <-- value is not defined 
     $.each(value, walker); 
    } 
} 
+0

謝謝@epascarello,我應用了你的建議,但它並沒有幫助我想要的最終結果,+1爲初始幫助 – Change

+0

嗯,爲了獲得最終結果,您需要構建一個帶有父鍵的字符串。你所做的只是寫出當前的密鑰。 – epascarello

0

這似乎是你想要什麼:

mainObject = {"odata.metadata":"http://services.odata.org/V3/OData/OData.svc/$metadata#Categories","value":[{"Products":[{"Supplier":{"ID":1,"Name":"Tokyo Traders","Address":{"Street":"NE 40th","City":"Redmond","State":"WA","ZipCode":"98052","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.107711791992,47.6472206115723],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":null,"ID":0,"Name":"Bread","Description":"Whole grain bread","ReleaseDate":"1992-01-01T00:00:00","DiscontinuedDate":null,"Rating":4,"Price":2.5},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":{"ProductID":1,"Details":"Details of product 1"},"ID":1,"Name":"Milk","Description":"Low fat milk","ReleaseDate":"1995-10-01T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":3.5}],"ID":0,"Name":"Food"},{"Products":[{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":{"ProductID":1,"Details":"Details of product 1"},"ID":1,"Name":"Milk","Description":"Low fat milk","ReleaseDate":"1995-10-01T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":3.5},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":null,"ID":2,"Name":"Vint soda","Description":"Americana Variety - Mix of 6 flavors","ReleaseDate":"2000-10-01T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":20.9},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":{"ProductID":3,"Details":"Details of product 3"},"ID":3,"Name":"Havina Cola","Description":"The Original Key Lime Cola","ReleaseDate":"2005-10-01T00:00:00","DiscontinuedDate":"2006-10-01T00:00:00","Rating":3,"Price":19.9},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":{"ProductID":4,"Details":"Details of product 4"},"ID":4,"Name":"Fruit Punch","Description":"Mango flavor, 8.3 Ounce Cans (Pack of 24)","ReleaseDate":"2003-01-05T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":22.99},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":null,"ID":5,"Name":"Cranberry Juice","Description":"16-Ounce Plastic Bottles (Pack of 12)","ReleaseDate":"2006-08-04T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":22.8},{"Supplier":{"ID":0,"Name":"Exotic Liquids","Address":{"Street":"NE 228th","City":"Sammamish","State":"WA","ZipCode":"98074","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.03547668457,47.6316604614258],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":null,"ID":6,"Name":"Pink Lemonade","Description":"36 Ounce Cans (Pack of 3)","ReleaseDate":"2006-11-05T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":18.8},{"odata.type":"ODataDemo.FeaturedProduct","Supplier":null,"ProductDetail":null,"ID":9,"Name":"Lemonade","Description":"Classic, refreshing lemonade (Single bottle)","ReleaseDate":"1970-01-01T00:00:00","DiscontinuedDate":null,"Rating":7,"Price":1.01},{"odata.type":"ODataDemo.FeaturedProduct","Supplier":null,"ProductDetail":null,"ID":10,"Name":"Coffee","Description":"Bulk size can of instant coffee","ReleaseDate":"1982-12-31T00:00:00","DiscontinuedDate":null,"Rating":1,"Price":6.99}],"ID":1,"Name":"Beverages"},{"Products":[{"Supplier":{"ID":1,"Name":"Tokyo Traders","Address":{"Street":"NE 40th","City":"Redmond","State":"WA","ZipCode":"98052","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.107711791992,47.6472206115723],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":null,"ID":7,"Name":"DVD Player","Description":"1080P Upconversion DVD Player","ReleaseDate":"2006-11-15T00:00:00","DiscontinuedDate":null,"Rating":5,"Price":35.88},{"Supplier":{"ID":1,"Name":"Tokyo Traders","Address":{"Street":"NE 40th","City":"Redmond","State":"WA","ZipCode":"98052","Country":"USA"},"Location":{"type":"Point","coordinates":[-122.107711791992,47.6472206115723],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"Concurrency":0},"ProductDetail":{"ProductID":8,"Details":"Details of product 8"},"ID":8,"Name":"LCD HDTV","Description":"42 inch 1080p LCD with Built-in Blu-ray Disc Player","ReleaseDate":"2008-05-08T00:00:00","DiscontinuedDate":null,"Rating":3,"Price":1088.8}],"ID":2,"Name":"Electronics"}]} 
 

 
function displayAllProperties(object) { 
 
    var parentObj = ""; 
 
    for (var property in object) { 
 
    var type = typeof object[property]; 
 
    if (type === 'string' || type === 'number' || type === 'boolean' || object[property] instanceof Date || !object[property]) { 
 
     console.log((parentObj?parentObj+".":"")+property+":"+object[property]); 
 
    } else if (type === "object") { 
 
     parentObj = property; 
 
     displayAllProperties(object[property]); 
 
    } 
 
    } 
 
} 
 
displayAllProperties(mainObject)