2017-02-15 35 views
0

好吧,我有以下JSON代碼:計數JSON節點不工作

{ 
"productDetails": { 
    "productThumb": "/uploads/[email protected]/showup-bg4.jpg", 
    "productName": "Hamburger", 
    "productDesc": "Made with 100% American ground beef", 
    "productPrice": "9.99", 
    "productModifiers": [{ 
     "Sides": [{ 
      "modifierName": "Applesauce", 
      "modifierUpcharge": "0", 
      "isDefault": "off" 
     },{ 
      "modifierName": "Rice", 
      "modifierUpcharge": "0", 
      "isDefault": "off" 
     }], 
     "Toppings": [{ 
      "modifierName": "Bacon", 
      "modifierUpcharge": "0.25", 
      "isDefault": "off" 
     }, { 
      "modifierName": "Tomato", 
      "modifierUpcharge": "0", 
      "isDefault": "on" 
     }], 
     "Doneness": [{ 
      "modifierName": "Extra Well", 
      "modifierUpcharge": "0", 
      "isDefault": "off" 
     },{ 
      "modifierName": "Well", 
      "modifierUpcharge": "0", 
      "isDefault": "off" 
     }], 
     "Breads": [{ 
      "modifierName": "White Bun", 
      "modifierUpcharge": "0", 
      "isDefault": "on" 
     }, { 
      "modifierName": "Whole Wheat Bun", 
      "modifierUpcharge": "0", 
      "isDefault": "off" 
     }] 
    }] 
} 
} 

我跑它通過jsonlint.com並驗證它回來作爲有效的JSON。在我的jQuery,我有以下代碼:

$.ajax({ 
    url: "/getItemDetails/"+productType+"/"+productID, 
    type: "get", 
    data: ({productType:productType, productID:productID}), 
    dataType: "json", 
    success: function(data) { 
     var numMods = data.productDetails.productModifiers.length; 
     console.log("There are "+numMods+" categories of modifiers."); 
    } 
}); 

由於某些原因,但是,我的console.log返回爲未定義。基本上,我需要知道productModifiers節點內有多少「類別」。所以在這種情況下,它應該返回4(側面,澆頭,完整和麪包)。我似乎無法弄清楚我缺少的東西,這將使我能夠弄清楚有多少個子節點

回答

0

的問題是,productModifiers是與它一個對象,它包含了你所需要的類別多鍵的數組。因此,下面是你需要的代碼。如果productModifiers的對象多於1個,則需要遍歷對象來計算類別。

var json = { 
 
    "productDetails": { 
 
    "productThumb": "/uploads/[email protected]/showup-bg4.jpg", 
 
    "productName": "Hamburger", 
 
    "productDesc": "Made with 100% American ground beef", 
 
    "productPrice": "9.99", 
 
    "productModifiers": [{ 
 
     "Sides": [{ 
 
     "modifierName": "Applesauce", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Rice", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }], 
 
     "Toppings": [{ 
 
     "modifierName": "Bacon", 
 
     "modifierUpcharge": "0.25", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Tomato", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "on" 
 
     }], 
 
     "Doneness": [{ 
 
     "modifierName": "Extra Well", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Well", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }], 
 
     "Breads": [{ 
 
     "modifierName": "White Bun", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "on" 
 
     }, { 
 
     "modifierName": "Whole Wheat Bun", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }] 
 
    }] 
 
    } 
 
} 
 

 

 
var numMods = Object.keys(json.productDetails.productModifiers[0]).length; 
 
console.log("There are " + numMods + " categories of modifiers.");

+0

這對於獲取節點數量非常有用。這就是說 - 我怎麼能訪問實際的節點名稱? (即:面,面,面,麪包)。 –

+0

@JohnHubler Object.keys(json.productDetails.productModifiers [0])將包含節點名稱。只需在獲取其長度之前將其保存到變量:) – matt

0

我猜即使你的productModifiers擁有一個數組;該數組只保存4個鍵的單個對象。能否請您用下面的代碼試試:

var data = { 
 
    "productDetails": { 
 
    "productThumb": "/uploads/[email protected]/showup-bg4.jpg", 
 
    "productName": "Hamburger", 
 
    "productDesc": "Made with 100% American ground beef", 
 
    "productPrice": "9.99", 
 
    "productModifiers": [{ 
 
     "Sides": [{ 
 
     "modifierName": "Applesauce", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Rice", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }], 
 
     "Toppings": [{ 
 
     "modifierName": "Bacon", 
 
     "modifierUpcharge": "0.25", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Tomato", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "on" 
 
     }], 
 
     "Doneness": [{ 
 
     "modifierName": "Extra Well", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }, { 
 
     "modifierName": "Well", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }], 
 
     "Breads": [{ 
 
     "modifierName": "White Bun", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "on" 
 
     }, { 
 
     "modifierName": "Whole Wheat Bun", 
 
     "modifierUpcharge": "0", 
 
     "isDefault": "off" 
 
     }] 
 
    }] 
 
    } 
 
}; 
 

 
var productModifiersObj = data.productDetails.productModifiers[0]; 
 

 
var count = 0; 
 
var i; 
 

 
for (i in productModifiersObj) { 
 

 
    if (productModifiersObj.hasOwnProperty(i)) { 
 
    count++; 
 
    } 
 
} 
 

 
alert("There are " + count + " categories of modifiers.");

+0

而是然後循環。查看我的答案,獲取Object.keys然後獲取返回列表的長度會更容易,更高效。 :) – matt

+0

Object.keys'在大多數現代瀏覽器上都能正常工作,儘管它與舊版IE瀏覽器不兼容...所以它最好使用通用兼容代碼。 – vijayP

+0

很高興知道,相當真實。 – matt