使用JavaScript将JSON数据显示到HTML页面

时间:2017-12-16 23:43:48

标签: javascript json

第一次接触JSON所以请解释,就像我5岁,没有行话。 我得到了这样的JSON文件,需要在HTML列表中显示这些项目。 很多例子都将JSON对象分配给变量 - 这没有分配给变量,所以我不确定如何引用它。 如何访问和显示产品列表中的所有内容。 在我的html中,我链接到了script.js文件以及这个json文件。

HTML

  <h1>My Cart</h1>
    <div id="cart">
        <h2>Cart Items</h2>
        <ul id="cartItemsList">
        </ul>
    </div>

JSON

    "basket": {
        "productList": [{
            "product": {
                "id": "111",
                "name": "Dog",
                "shortDescription": "<p>Mans best friend</p>",
                },
                "category": "Canine",
                "availability": "In Stock",
                "variationType": {
                    "name": "Breed",
                    "value": "Collie"
                }
            },
            "quantity": 1,
            "price": "$53.00"
        }, {
            "product": {
                "id": "112",
                "name": "Dog",
                "shortDescription": "<p>Not so best friend</p>",
                "category": "feline",
                "availability": "Low In Stock",
                "variationType": {
                    "name": "breed",
                    "value": "Maine Coon"
                }
            },
            "quantity": 1,
            "price": "$49.00"
        }, {
            "product": {
                "id": "113",
                "name": "Rabbit",
                "shortDescription": "Likes carrots",
                "category": "cuniculus",
                "availability": "In Stock"
            },
            "quantity": 1,
            "price": "$66.00"
        }]
    }

的JavaScript

    var products = document.getElementById("cartItemsList");
    cartItemsList.innerHTML = "<li>" + product + "</li>";

5 个答案:

答案 0 :(得分:2)

如果从外部文件加载,则需要Ajax或类似的调用。要使用Ajax,您必须在项目的HTML文件中添加一个名为jQuery的库。然后,您可以调用您的JSON,而无需将其作为javascript变量引用,如下面的工作代码段所示。

&#13;
&#13;
/* I put your JSON into an external file, loaded from github */
var url = "https://raw.githubusercontent.com/mspanish/playground/master/jessica.json";

/* this tells the page to wait until jQuery has loaded, so you can use the Ajax call */

$(document).ready(function(){
  $.ajax({
    url: url,
    dataType: 'json',
      error: function(){
        console.log('JSON FAILED for data');
      },
    success:function(results){
  /* the results is your json, you can reference the elements directly by using it here, without creating any additional variables */
  
      var cartItemsList = document.getElementById("cartItemsList");

      results.basket.productList.forEach(function(element) {
      cartItemsList.insertAdjacentHTML( 'beforeend',"<li>" +              element.product.name + " : " + element.price+ " </li>");
      }); // end of forEach
    }  // end of success fn
   }) // end of Ajax call
 }) // end of $(document).ready() function
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<h1>My Cart</h1>
<div id="cart">
    <h2>Cart Items</h2>
    <ul id="cartItemsList">
    </ul>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如果要解析对象:

function logTheObj(obj) {
    var ret = "";
    for (var o in obj) {
        var data = obj[o];
        if (typeof data !== 'object') {
            ret += "<li>" + o + " : " + data + "</li>";
        } else {
            ret += "<li>" + o + " : " + logTheObj(data) + "</li>";
        }
    }
    return "<ul>" + ret + "</ul>";
}

如果您的对象在字符串中:

logTheObj(JSON.parse(jsonString));

答案 2 :(得分:0)

首先,您必须将json从长字符串转换为急剧的js对象。 你是通过JSON.parse命令这样做的。像这样:

let jsObj = JSON.parse( youreJsonString);

他们,您可以循环抛出productList中的产品并构建您的html代码,如下所示:

var products = document.getElementById("cartItemsList");

jsObj.basket.productList.forEach( function(product ) {
        cartItemsList.innerHTML = "<li>" + product.name + " : " + product.price+ " </li>";
});

答案 3 :(得分:0)

除非您使用Ajax调用或类似的东西来加载外部JSON,否则您需要将您提供的JSON转换为可以作为变量引用的对象。此外,您的JSON无效。我在这里尝试纠正它,并且我将引用您的JSON作为对象,您可以通过名为 obj 的变量来引用它。这是一个有效的代码片段。

&#13;
&#13;
var obj = { 
"basket": {
		"productList": [{
			"product": {
				"id": "111",
				"name": "Dog",
				"shortDescription": "<p>Mans best friend</p>",
				"category": "Canine",
				"availability": "In Stock",
				"variationType": {
					"name": "Breed",
					"value": "Collie"
				}
			},
			"quantity": 1,
			"price": "$53.00"
		}, {
			"product": {
				"id": "112",
				"name": "Dog",
				"shortDescription": "<p>Not so best friend</p>",
				"category": "feline",
				"availability": "Low In Stock",
				"variationType": {
					"name": "breed",
					"value": "Maine Coon"
				}
			},
			"quantity": 1,
			"price": "$49.00"
		}, {
			"product": {
				"id": "113",
				"name": "Rabbit",
				"shortDescription": "Likes carrots",
				"category": "cuniculus",
				"availability": "In Stock"
			},
			"quantity": 1,
			"price": "$66.00"
		}]
	}
}

var cartItemsList = document.getElementById("cartItemsList");

obj.basket.productList.forEach(function(element) {
        cartItemsList.insertAdjacentHTML( 'beforeend',"<li>" + element.product.name + " : " + element.price+ " </li>");
});
&#13;
 <h1>My Cart</h1>
    <div id="cart">
        <h2>Cart Items</h2>
        <ul id="cartItemsList">
        </ul>
    </div>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

使用来自Stacey Reiman先前答案的外部json文件的Javascript Ajax版本

const products = document.getElementById("cartItemsList");

/* get basket items from JSON */
class Basket {
    async cartItems() {
        try {
            let result = await fetch('https://raw.githubusercontent.com/mspanish/playground/master/jessica.json')
            let data = await result.json()
           // return data
            
           /* destructuring data */ 
         let basketItems = data.basket.productList
            basketItems = basketItems.map(item =>{
            const price = item.price
            const{id,name,shortDescription,category,availability} = item.product
            const breed = item.product.variationType
            const quantity = item.quantity
              
            return {price,id,name,shortDescription,category,availability,quantity,breed}
            })
            return basketItems 
            
        } catch (error) {
            console.log(error)  
        }
    }
}
/* Display stuff from the basket */
class Display {
    displayBasket(basket) {
    //console.log(basket)
         let result = ""
        basket.forEach((item)=>{
        result += `
        <li>
        id : ${item.id}
        name: ${item.name}
        price: ${item.price}
        availability: ${item.availability}
        category : ${item.category}
        quantity : ${item.quantity}
        shortDescription : ${item.shortDescription}
        </li>
        `})
        cartItemsList.innerHTML = result 
    }
}

document.addEventListener("DOMContentLoaded", ()=>{
    const basket  = new Basket()
    const display = new Display()

    basket.cartItems().then(basket => display.displayBasket(basket))
})
 <h1>My Cart</h1>
    <div id="cart">
        <h2>Cart Items</h2>
        <ul id="cartItemsList">
        </ul>
    </div>