Jquery JSON-嵌套数据上的迭代
我有一个JSON文件,其结构如下:Jquery JSON-嵌套数据上的迭代,jquery,json,Jquery,Json,我有一个JSON文件,其结构如下: {"products":[ { "tvs":[ {"samsung":[ {"leds":[ { "product_id": "034567", "product_name": "Samsung UA22F5100 22'' LED TV (Black)", "model_no":
{"products":[
{ "tvs":[
{"samsung":[
{"leds":[
{
"product_id": "034567",
"product_name": "Samsung UA22F5100 22'' LED TV (Black)",
"model_no": "UA22F5100",
"brand": "Samsung",
"price": 399,
"screen_size": 22,
"screen_res": "1920 x 1080",
"usb": 1,
"hdmi": 1,
"screen_format": "LED",
"dimensions": "513.1 x 366.5 x 169.6",
"manuf_guarantee": "1 year"
},
{
"product_id": "012468",
"product_name": "Samsung 23F4003 23'' LED TV (Black)",
"model_no": "23F4003",
"brand": "Samsung",
"price": 459,
"screen_size": 23,
"screen_res": "1366 x 768 pixels",
"usb": 1,
"hdmi": 1,
"screen_format": "LED",
"dimensions": "551.9 x 368.4 x 123.4",
"manuf_guarantee": "1 year"
}
]},
{"plasma":[
{
"product_id": "043291",
"product_name": "Samsung 43F4100 43'' Plasma TV (Black)",
"model_no": "43F4100",
"brand": "Samsung",
"price": 399,
"screen_size": 43,
"screen_res": "852 x 480",
"usb": 2,
"hdmi": 2,
"screen_format": "Plasma",
"dimensions": "1007.4 x 670.5 x 261.9",
"manuf_guarantee": "1 year"
},
etc...
在从ajax请求检索结果之后,我需要对其进行迭代。我需要过滤数据,例如,只获取led'
对象。
过滤的最佳方式是什么:
我应该使用jquery的.each()
,还是在循环中使用
我试图使用.each()方法对其进行迭代,但我遇到了需要检查当前对象是'led'
还是'plasma'
的问题
另一方面,如果我对(obj中的var x)使用,
,我可以通过'x'访问对象的名称
那么,我应该使用for in
循环来完成吗?我到底要怎么做 假设数据包含json
data.each(function(index, product) {
product.each(function(index, tv) {
tv.each(function(index, mark) {
mark.each(function(index, type) {
if (type=='leds') {
// Do whatever you want ...
}
});
});
});
});
编辑:完全使用AJAX调用
var obj = {};
obj.my_post_value = my_post_value;
var str = jQuery.param(obj);
$.ajax({
type: "POST",
url: 'my_url',
dataType: 'json',
data: str,
success: function (data) {
// handle your successful stuff here
data.each(function(index, product) {
product.each(function(index, tv) {
tv.each(function(index, mark) {
mark.each(function(index, type) {
if (type=='leds') {
// Do whatever you want ...
}
});
});
});
});
},
error: function (data) {
// handle your unsuccessful stuff here
}
});
这是来自本机javascript的解决方案
<html>
<script>
var jsonArray = {"products":[
{ "tvs":[
{"samsung":[
{"leds":[
{
"product_id": "034567",
"product_name": "Samsung UA22F5100 22'' LED TV (Black)",
"model_no": "UA22F5100",
"brand": "Samsung",
"price": 399,
"screen_size": 22,
"screen_res": "1920 x 1080",
"usb": 1,
"hdmi": 1,
"screen_format": "LED",
"dimensions": "513.1 x 366.5 x 169.6",
"manuf_guarantee": "1 year"
},
{
"product_id": "012468",
"product_name": "Samsung 23F4003 23'' LED TV (Black)",
"model_no": "23F4003",
"brand": "Samsung",
"price": 459,
"screen_size": 23,
"screen_res": "1366 x 768 pixels",
"usb": 1,
"hdmi": 1,
"screen_format": "LED",
"dimensions": "551.9 x 368.4 x 123.4",
"manuf_guarantee": "1 year"
}
]},
{"plasma":[
{
"product_id": "043291",
"product_name": "Samsung 43F4100 43'' Plasma TV (Black)",
"model_no": "43F4100",
"brand": "Samsung",
"price": 399,
"screen_size": 43,
"screen_res": "852 x 480",
"usb": 2,
"hdmi": 2,
"screen_format": "Plasma",
"dimensions": "1007.4 x 670.5 x 261.9",
"manuf_guarantee": "1 year"
}
]
}
]
}]
}]
};
var brand = "samsung"; //I assume that you know, how to get this based on your design
var type = "leds"; //I assume that you know, how to get this based on your design
var typeArray = eval("jsonArray.products[0].tvs[0]."+brand+"[0]."+type);
if(typeArray .length){
for(var i=0; i<typeArray .length; i++){
var product_id = typeArray [i].product_id;
alert(product_id);
}
}
</script>
<body>
</body>
</html>
var jsonArray={“产品”:[
{“电视”:[
{“三星”:[
{“发光二极管”:[
{
“产品id”:“034567”,
“产品名称”:“三星UA22F5100 22英寸LED电视(黑色)”,
“型号号”:“UA22F5100”,
“品牌”:“三星”,
“价格”:399,
“屏幕大小”:22,
“屏幕分辨率”:“1920 x 1080”,
“usb”:1,
“hdmi”:1,
“屏幕格式”:“LED”,
“尺寸”:“513.1 x 366.5 x 169.6”,
“制造保证”:“1年”
},
{
“产品id”:“012468”,
“产品名称”:“三星23F40033”LED电视(黑色)”,
“型号号”:“23F4003”,
“品牌”:“三星”,
“价格”:459,
“屏幕大小”:23,
“屏幕分辨率”:“1366 x 768像素”,
“usb”:1,
“hdmi”:1,
“屏幕格式”:“LED”,
“尺寸”:“551.9 x 368.4 x 123.4”,
“制造保证”:“1年”
}
]},
{“等离子”:[
{
“产品id”:“043291”,
“产品名称”:“三星43F4100 43”等离子电视(黑色),
“型号号”:“43F4100”,
“品牌”:“三星”,
“价格”:399,
“屏幕大小”:43,
“屏幕分辨率”:“852 x 480”,
“usb”:2,
“hdmi”:2,
“屏幕格式”:“等离子”,
“尺寸”:“1007.4 x 670.5 x 261.9”,
“制造保证”:“1年”
}
]
}
]
}]
}]
};
var brand=“三星”//我想你知道,如何根据你的设计得到这个
var type=“LED”//我想你知道,如何根据你的设计得到这个
var typeArray=eval(“jsonArray.products[0].tvs[0].+brand+[0].+type”);
if(typeArray.length){
对于(var i=0;itahnks,您的答案是什么?这是否需要我将它们解析为一个jquery对象来使用.each()?我已经尝试过了,但实际上没有效果。这取决于如何获取数据。AJAX?目前我使用的是getJSON()方法,但考虑将$.ajax与get请求一起使用,因为我需要控制成功、失败等情况,所以是的,AJAXI只是在JQuery中使用完整的ajax调用编辑了我的注释;)如果不需要传递值,只需删除$.ajax…之前的行,并在$.ajax中删除行“data:str,”我不认为类型
可以等同于发光二极管
。因为它将一个对象与字符串进行比较..如果我错了,请纠正我:)嗨,Asik,这很好,它很简单!但是我想要更具动态性的东西..例如,在某一点上,我想为三星发光二极管过滤,在另一点上,我想为索尼过滤plasma的..我应该用一些javascipt来传递钥匙吗(比如三星、索尼或其他品牌?)然后使用字符串连接?这是一种好方法吗?@user2678538如果你有新问题,请问一个新问题。我在JQuery中的评论是一种动态方法;)@Maxime我喜欢在对象上进行迭代可以更加灵活,如果我能做到的话work@user2678538,是的,你可以…我已经更新了我的帖子…看,这可能对你有用。祝你好运