parse through JSON Jquery
Test.Customers = [{
"CustomerPortals":[{
"filename":"chrysanthemum.jpg",
"ext":"jpg",
},{
"name":"Lighthouse.jpg",
"filename":"lighthouse.jpg",
"ext":"jpg",
},{
"filename":"lighthouse.jpg",
"ext":"jpg",
}
}]
I have this json stored in my DOM. Sometimes there will be 0 items and sometimes multiple items in CustomerPortals array. But I want to parse through them and show the filename. Does jquery make it any simpler to do that?
EDIT
EDIT
var Test = {};
Test.Customers = [{"CustomerItems":
"Portals":
{"id":"1","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"11","test":"4251","portalname":"tye.jpg"},
{"id":"12","test":"4251","portalname":"Lsdf.jpg"},
{"id":"13","test":"4251","portalname":"nick.jpg"}
]
}
},
{"CustomerItems":
"Portals":
{"id":"2","customer":"1952","resident":"yes",
"CustomPortals":
[
{"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
{"id":"15","test":"4255","portalname":"navagin.jpg"},
{"id":"16","test":"4257","portalname":"jasoria.开发者_开发知识库jpg"}
]
}
},
{"CustomerItems":
"Portals":
{"id":"3","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
{"id":"18","test":"4651","portalname":"Ltd1.jpg"},
{"id":"19","test":"4281","portalname":"ser1.jpg"}
]
}
}
]
I want to get the portalname for all the customers. the above was not showing sub arrays thanks
The only thing I can think of that jquery can help you with is the .each()
function. Here is an example where I go through each filename in each customer.
Updated code to include Portals which holds the CustomerPortals. Let me know if I interpreted your comment incorrectly.
Updated code again to use the new example code. The example code was causing errors so I added { } around "Portals" and its value. If that wasn't the intended format for the code let me know.
var Test = {};
Test.Customers = [{"CustomerItems":
{"Portals":
{"id":"1","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"11","test":"4251","portalname":"tye.jpg"},
{"id":"12","test":"4251","portalname":"Lsdf.jpg"},
{"id":"13","test":"4251","portalname":"nick.jpg"}
]
}
}
},
{"CustomerItems":
{"Portals":
{"id":"2","customer":"1952","resident":"yes",
"CustomPortals":
[
{"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
{"id":"15","test":"4255","portalname":"navagin.jpg"},
{"id":"16","test":"4257","portalname":"jasoria.jpg"}
]
}
}
},
{"CustomerItems":
{"Portals":
{"id":"3","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
{"id":"18","test":"4651","portalname":"Ltd1.jpg"},
{"id":"19","test":"4281","portalname":"ser1.jpg"}
]
}
}
}
]
$(document).ready(function() {
//Go through each customer
$.each(Test.Customers, function(customerIndex, customerValue) {
//Go through each CustomerPortal and display filename
$.each(customerValue.CustomerItems.Portals.CustomPortals, function(custPortIndex, custPortValue) {
alert('File ' + custPortValue.portalname + ' in customer ' + customerIndex);
});
});
});
EDIT
var Test = {};
Test.Customers = [{"CustomerItems":
"Portals":
{"id":"1","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"11","test":"4251","portalname":"tye.jpg"},
{"id":"12","test":"4251","portalname":"Lsdf.jpg"},
{"id":"13","test":"4251","portalname":"nick.jpg"}
]
}
},
{"CustomerItems":
"Portals":
{"id":"2","customer":"1952","resident":"yes",
"CustomPortals":
[
{"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
{"id":"15","test":"4255","portalname":"navagin.jpg"},
{"id":"16","test":"4257","portalname":"jasoria.jpg"}
]
}
},
{"CustomerItems":
"Portals":
{"id":"3","customer":"1950","resident":"yes",
"CustomPortals":
[
{"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
{"id":"18","test":"4651","portalname":"Ltd1.jpg"},
{"id":"19","test":"4281","portalname":"ser1.jpg"}
]
}
}
]
I want to get the portalname for all the customers. the above was not showing sub arrays thanks
I doubt it. JSON object hierarchies aren't visible as DOM nodes.
You could use a map function, which is very easy to write, and readily available in libraries like Functional JavaScript. Using it is simple:
filenames = Test.Customers[0].CustomerPortals.map(function(cp) { return cp.filename });
Then do whatever you want with the array of filenames.
EDIT: To confirm this, I ran the following code in a JavaScript test bench.
Test = {};
Test.Customers = [{
"CustomerPortals":[{
"filename":"chrysanthemum.jpg",
"ext":"jpg",
},{
"name":"Lighthouse.jpg",
"filename":"lighthouse.jpg",
"ext":"jpg",
},{
"filename":"lighthouse.jpg",
"ext":"jpg",
}]
}];
Array.prototype.map = function(fn) {
var r = [];
var l = this.length;
for(i=0;i<l;i++)
{
r.push(fn(this[i]));
}
return r;
};
alert(Test.Customers[0].CustomerPortals.map(function(cp) { return cp.filename }));
It displayed an alert with the following message:
chrysanthemum.jpg,lighthouse.jpg,lighthouse.jpg
精彩评论