Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象数组中循环通过Json结果对象_Javascript_Json_Jquery - Fatal编程技术网

Javascript 如何在对象数组中循环通过Json结果对象

Javascript 如何在对象数组中循环通过Json结果对象,javascript,json,jquery,Javascript,Json,Jquery,我的c#代码返回了一个json对象。我在jquery中循环浏览结果 一切正常,但这只是一个示例对象。实际对象要大得多,而我目前使用的方法不是很干净。谁能帮助我如何在对象内部循环对象 这是我的密码 响应JSON [ { "ProductId":7363, "ProductName":"Brisk Waterproof Men\u0027s Jacket", "ProductDetails":{ "ImagePath":"/assets/p

我的c#代码返回了一个json对象。我在jquery中循环浏览结果

一切正常,但这只是一个示例对象。实际对象要大得多,而我目前使用的方法不是很干净。谁能帮助我如何在对象内部循环对象

这是我的密码

响应JSON

[
   {
      "ProductId":7363,
      "ProductName":"Brisk Waterproof Men\u0027s Jacket",
      "ProductDetails":{
         "ImagePath":"/assets/productimages/017/017271_BLA_MENS_BRISK_JACKET_-(10).jpg",
         "ImageAltText":"BLACK:3",
         "ProductSummary":"Waterproof & taped seams\r\nHighly breathable fabric\r\nDouble storm flap\r\nMultiple pockets",
         "MSRP":{
            100.00      
         },
         "Price":{
           65.00
         }
      },
      "StatusCode":"Success",
      "ErrorMessage":null
   },
   {
      "ProductId":6941,
      "ProductName":"Fizz Kid\u0027s Waterproof Jacket",
      "ProductDetails":{
         "ImagePath":"/assets/productimages/016/016792_BLA_FIZZ_KIDS_JACKET_SS13_4.jpg",
         "ImageAltText":"BLACK:5",
         "ProductSummary":"Waterproof & taped seams\r\nDetachable hood\r\nAdjustable hem\r\nMultiple pockets",
         "MSRP":{
              150.00
         },
         "Price":{
             129.00
         }
      },
      "StatusCode":"Success",
      "ErrorMessage":null
   }
]
jQuery

$('.btnGo').on("click", function (e) {
    console.log("click event fired");
    var jsonData = [{
        ProductId: "7363"
    }, {
        ProductId: "6941"
    }];
    $.ajax({
        url: "/JsonHelper/ProductHelper.ashx",
        data: JSON.stringify(jsonData),
        dataType: 'json',
        type: 'POST',
        contentType: 'application/json',
        success: function (data) {
            $.each(data, function (key, value) {
                console.log('Object: ' + key);
                var details = value.ProductDetails;
                var MSRP = value.ProductDetails.MSRP;
                var price = value.ProductDetails.Price;
                console.log(details);
                console.log(MSRP);
                console.log(price);
                $('.resultJson').append("<br />");
                $.each(value, function (k, v) {
                    $('.resultJson').append(k + ":    " + v + "<br />");
                    if (k == "ProductDetails") {
                        if (details != null) {
                            $.each(details, function (dk, dv) {
                                $('.resultJson').append(dk + ":    " + dv + "<br />");
                            });
                        }
                    }
                    if (k == "MSRP") {
                        if (MSRP != null) {
                            $.each(MSRP, function (mk, mv) {
                                $('.resultJson').append(mk + ":    " + mv + "<br />");
                            });
                        }
                    }
                    if (k == "Price") {
                        if (price != null) {
                            $.each(price, function (pk, pv) {
                                $('.resultJson').append(pk + ":    " + pv + "<br />");
                            });
                        }
                    }
                });
                $('.resultJson').append("----------------  ------------------");
            });
        },
        error: function (data, status) {
            console.log("FAILED:" + status);
        }
    });
});
$('.btnGo')。在(“单击”上,函数(e){
log(“单击触发的事件”);
var jsonData=[{
ProductId:“7363”
}, {
ProductId:“6941”
}];
$.ajax({
url:“/JsonHelper/ProductHelper.ashx”,
数据:JSON.stringify(jsonData),
数据类型:“json”,
键入:“POST”,
contentType:'应用程序/json',
成功:功能(数据){
$。每个(数据、函数(键、值){
log('Object:'+key);
var details=value.ProductDetails;
var MSRP=value.ProductDetails.MSRP;
var价格=value.ProductDetails.price;
控制台日志(详细信息);
控制台日志(MSRP);
控制台日志(价格);
$('.resultJson')。追加(
); $。每个(值、函数(k、v){ $('.resultJson')。追加(k+“:“+v+”
); 如果(k==“产品详细信息”){ 如果(详细信息!=null){ $。每个(详细信息、功能(dk、dv){ $('.resultJson')。追加(dk+“:“+dv+”
); }); } } 如果(k==“MSRP”){ 如果(MSRP!=null){ $。每个(MSRP,功能(mk,mv){ $('.resultJson')。追加(mk+“:“+mv+”
); }); } } 如果(k=“价格”){ 如果(价格!=null){ 美元/个(价格、功能(主键、pv){ $('.resultJson')。追加(pk+“:“+pv+”
); }); } } }); $('.resultJson').append(“---------------------------------”); }); }, 错误:功能(数据、状态){ console.log(“失败:+状态”); } }); });

我对$.each感到非常困惑,不知道如何有效地循环多个对象。

我建议,如果您的数据是一致的,那么最好直接使用格式,而不是循环所有内容以查找键和值。我使用您的代码创建了(跳过AJAX部分),并与以下代码进行了对比:

var success = function (data) {
    var product, i, len, $output = $('.resultJson');
    for (i = 0, len = data.length; i < len; i++) {
        product = data[i];
        console.log('Object: ' + i);
        var details = product.ProductDetails;
        var MSRP = product.ProductDetails.MSRP;
        var price = product.ProductDetails.Price;
        console.log(details);
        console.log(MSRP);
        console.log(price);

        $output.append("<br />");
        $output.append("ProductId: " + product.ProductId + "<br />");        
        $output.append("ProductName: " + product.ProductName + "<br />");        
        $output.append("ProductDetails: " + "<br />");
        if (details) {
            $output.append("ImagePath: " + details.ImagePath + "<br />");
            $output.append("ImageAltText: " + details.ImageAltText + "<br />");
            $output.append("ProductSummary: " + details.ProductSummary + "<br />");
            $output.append("MSRP: " + MSRP + "<br />");
            $output.append("Price: " + price + "<br />");
        }
        $output.append("StatusCode: " + product.StatusCode + "<br />");        
        $output.append("ErrorMessage: " + product.ErrorMessage + "<br />");        
        $('.resultJson').append("----------------  ------------------");
    }
};
var success=函数(数据){
var乘积,i,len,$output=$('.resultJson');
对于(i=0,len=data.length;i”);
$output.append(“ProductId:+product.ProductId+”
); $output.append(“ProductName:+product.ProductName+”
); $output.append(“ProductDetails:+”
); 若有(详情){ $output.append(“ImagePath:+details.ImagePath+”
); $output.append(“ImageAltText:+details.ImageAltText+”
); $output.append(“ProductSummary:+details.ProductSummary+”
); $output.append(“MSRP:+MSRP+”
); $output.append(“价格:“+Price+”
”); } $output.append(“状态码:+product.StatusCode+”
); $output.append(“ErrorMessage:+product.ErrorMessage+”
); $('.resultJson').append(“---------------------------------”); } };

我认为后者更容易理解。当然,如果您的数据不太一致,所有这些都是没有意义的。

您是否考虑过使用for循环而不是each循环?这对你有帮助。您做得很好,还需要什么?如果您希望得到任何答案,您应该只显示相关代码,而不只是给出整个jquery事件处理;)你应该能够直接使用对象,而不是循环,除了你需要一个外部循环,因为你从一个数组开始。你还需要解决这个问题:
“MSRP”:{100.00}
。大概应该是MSRP:100.00,价格也是如此。但是如果它是一个对象,那么您需要,比如说,
“MSRP”:{“val”:100.00}
。或者,如果这恰好是多值数组中的唯一值,您可能需要
“MSRP”:[100.00]
+1,并接受您的答案。我的代码也在运行,但我正在寻找您提供的更干净的解决方案。。