[英]parse through json correctly
我有這個json文件:
{
"categories": [
{
"producerName": "Canon",
"productName": [
{
"kamera": "EOS 5D",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark II",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark III",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"productObj": [
{
"objektiv": "Canon EF 15mm f/2.8 Fisheye",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon EF 8-15mm f/4L Fisheye USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon EF 14mm f/2.8L USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon 24mm f/1.4 L USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
}
]
},
{
"kamera": "EOS 7D",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
"productObj": [
{
"objektiv": "Canon EF 15mm f/2.8 Fisheye",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon EF 8-15mm f/4L Fisheye USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon EF 14mm f/2.8L USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
},
{
"objektiv": "Canon 24mm f/1.4 L USM",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
}
]
}
]
},
{
"producerName": "Nikon",
"productName": [
{
"kamera": "D800",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
"productObj": [
{
"objektiv": "Canon EF 15mm f/2.8 Fisheye",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
}
]
}
]
},
{
"producerName": "Olympus",
"productName": [
{
"kamera": "OM-D EM-5",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/",
"productObj": [
{
"objektiv": "Canon EF 15mm f/2.8 Fisheye",
"link": "/uw-ports-fuer/vollformat/canon-ef-8-15mm-f-4l-fisheye-usm/"
}
]
}
]
}
]
}
我通過帶有JSON回調的jQuery解析了此文件,效果很好。
唯一的問題是,我想獲得所有帶有連接到“ productObj”的“鏈接”的“ kamera”,但我總是只得到最后一個字符串。
希望您能夠幫助我。
jQuery部分:
$('#model').on("change", function() {
var indx = $("#cat").find(".selectBox-label").attr("id");
//console.log(indx);
var item = '<option id="std">2. Kamera auswählen:</option>';
for (n=0; n < menu[indx].productName.length; n++){
item += '<option id="'+[n]+'">' + menu[indx].productName[n].kamera + '</option>';
}
$('#camera').html(item);
$('#camera').selectBox('refresh');
$('#camera').selectBox('enable');
$.cookie('m', menu[indx].producerName);
$.removeCookie('k');
$.removeCookie('o');
//second onChange
$('#camera').on("change", function() {
var indy = $("#items").find(".selectBox-label").attr("id");
var goRef = menu[indx].productName[indy].link;
if(goRef) {
$.cookie('k', menu[indx].productName[indy].kamera);
if($(".leftfinder").length > 0) {
$(".gofind").css({'background': 'url(leftgofind.png)', 'cursor':'pointer'});
}else {
$(".gofind").css({'background': 'url(gofindbt.png)', 'cursor':'pointer'});
}
$(".gofind").on("click", function() {
window.location.href = "url"+goRef;
});
}
});
使用此代碼,您的屬性將被覆蓋:
var obj = { "kamera": "EOS 5D",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark II",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark III",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
}
等效於:
var obj = { "kamera": "EOS 5D Mark III",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"}
這就是為什么只得到最后一個字符串的原因。 您不能使用相同名稱定義具有多個屬性的對象
代替此結構:
{
"kamera": "EOS 5D",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark II",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/",
"kamera": "EOS 5D Mark III",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
}
為什么不擁有:
[
{
"kamera": "EOS 5D",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
},
{
"kamera": "EOS 5D Mark II",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
},
{
"kamera": "EOS 5D Mark III",
"link": "/unterwassergehaeuse-fuer/canon-eos-5d/"
}
]
即一組對象。 然后,您可以對其進行迭代。
這不是很好的JSON結構,您覆蓋了值,因為您使用了相同的鍵
無論如何,這里是如何解析:
$.each(json.categories, function(key, val) {
$.each(val.productName, function(key, val) {
console.log("kamera: " + val.kamera + " | link:" + val.link);
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.