javascript - 如何在 Javascript 中解析嵌套的 JSON?

标签 javascript json xmlhttprequest

我正在尝试使用 XMLHttpRequest 方法解析和显示 JSON 数据(产品目录)。我能够显示品牌及其名称,但无法以编程方式展示产品列表。

这是示例 JSON 请求:

   {
    "products": {
        "laptop": [{
            "brand": "sony",
            "price": "$1000"
        }, {
            "brand": "acer",
            "price": "$400"
        }],
        "cellphone": [{
            "brand": "iphone",
            "price": "$800"
        }, {
            "brand": "htc",
            "price": "$500"
        }],
        "tablets": [{
            "brand": "iPad",
            "price": "$800"
        }, {
            "brand": "htc-tab",
            "price": "$500"
        }]
    }
}

现在我正在使用以下代码以表格形式显示数据:

 function loadJSON() {

        var data_file = "http://localhost/AJAX/productcatalog.json";

        var http_request = new XMLHttpRequest();

        http_request.onreadystatechange = function () {

            if ((http_request.readyState == 4) && (http_request.status == 200)) {

                // Javascript function JSON.parse to parse JSON data
                var jsonObj = JSON.parse(http_request.responseText);
                data = '<table border="2"><tr><td>Type</td><td>Brand</td><td>Price</td></tr>';
                var i = 0;
                debugger;
                for (i = 0; i < jsonObj["products"].laptop.length; i++)
                {

                    obj = jsonObj["products"].laptop[i];

                    data = data + '<tr><td>laptop</td><td>' + obj.brand + '</td><td>' + obj.price + '</td></tr>';
                }
                for (i = 0; i < jsonObj["products"].cellphone.length; i++)
                {

                    obj = jsonObj["products"].cellphone[i];

                    data = data + '<tr><td>laptop</td><td>' + obj.brand + '</td><td>' + obj.price + '</td></tr>';
                }

                for (i = 0; i < jsonObj["products"].tablets.length; i++)
                {

                    obj = jsonObj["products"].tablets[i];

                    data = data + '<tr><td>laptop</td><td>' + obj.brand + '</td><td>' + obj.price + '</td></tr>';
                }

                data += '</table>';

                document.getElementById("demo").innerHTML = data;


            }
        }

        http_request.open("GET", data_file, true);
        http_request.send();
    }

问题 如何获取产品列表,即产品、手机和平板电脑?现在我已经对其进行了硬编码以获取完整的品牌列表。请指教。 (我想使用纯 javascript 而不是 jquery)

谢谢!

最佳答案

听起来您缺少的是“当我不知道所有键时如何迭代对象”。

对象是一组键值对。您可以使用 for/in 语法:for( var <key> in <object> ){}获取每个 key 。

对于您的用例,它可能类似于:

var products = jsonObject['products'];
for( var productName in products ){
  //productName would be "laptop", "cellphone", etc.
  //products[productName] would be an array of brand/price objects
  var product = products[productName];
  for( var i=0; i<product.length; i++ ){
    //product[i].brand
    //product[i].price
  }
}

在实践中,我可能会使用不那么冗长的内容,但这更容易理解正在发生的事情。

关于javascript - 如何在 Javascript 中解析嵌套的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844560/

相关文章:

javascript - window.location.href 与 $ (".confirm").click(function (e) 不返回完整网址

javascript - Rails Leaflet Webpack 空白页

php - 从 ajax 加载的脚本访问 JavaScript 函数

java - 如何隐式选择viewResolver

jquery - 带有远程 URL 的 JSONP 不起作用

javascript - 从浏览器发出 HTTP 请求,而不在请求 header 中发送任何 cookie

javascript - JQuery 从 onclick 函数中检索数据属性

java - Android,从azure表中检索经过身份验证的用户信息

javascript - 如何重写 XMLHttpRequest?

javascript - 检查服务器端更新的侵入性最小的方法是什么