You can use a JSON format to store and transfer a variety of data. Other than simple text data, you can also store URLs of images. For example,
[ { "Image": "https://www.encodedna.com/images/theme/angularjs.png" } ]In the above JSON array, the object “Image” has a URL of an image. This data can be stored in a JSON file.
You can easily retrieve data from a JSON file using jQuery. Here’s one post that explains how.
Now, let’s find out how we can show these images, extracted from a JSON file (with some other data), in an HTML <table> using jQuery.
Create JSON Data
I have JSON array with three different objects, ID, Name and Image. Copy the below data and paste it in a Notepad. Save the file as data-with-image.json.
[
{
"ID": "001",
"Name": "Angular",
"Image": "angularjs.png"
},
{
"ID": "002",
"Name": "JSON",
"Image": "json.png"
},
{
"ID": "003",
"Name": "Asp.Net",
"Image": "aspnet.png"
}
]
<html>
<head>
<title>Show Image from JSON using jQuery</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<style>
table
{
width: 300px;
font: 17px Calibri;
}
table, th, td
{
border: solid 1px #DDD;
border-collapse: collapse;
padding: 2px 3px;
text-align: center;
}
table img
{
border: none;
width: 51px;
height: 51px;
}
</style>
</head>
<body>
<p><input type="button" onclick="imagesFromJSON()" value="Show Images" /></p>
<div id='showData'></div>
</body>I have defined the CSS style for my HTML <table> and for assigning the image width and height. You can ignore it if you want.
<script>
$(document).ready(function () {
$.getJSON("data-with-image.json", function (data) {
var arrItems = []; // The array to store JSON items.
$.each(data, function (index, value) {
arrItems.push(value); // Push values in the array.
});
// Extract values for the table header.
var col = [];
for (var i = 0; i < arrItems.length; i++) {
for (var key in arrItems[i]) {
if (col.indexOf(key) === -1) {
col.push(key);
}
}
}
// Create a <table> element dynamically.
// Ref: https://www.encodedna.com/javascript/populate-json-data-to-html-table-using-javascript.htm
var table = document.createElement("table");
var tr = table.insertRow(-1); // Table row.
for (var i = 0; i < col.length; i++) {
var th = document.createElement("th"); // Table header.
th.innerHTML = col[i];
tr.appendChild(th);
}
// Add JSON data to the table as rows.
for (var i = 0; i < arrItems.length; i++) {
tr = table.insertRow(-1);
for (var j = 0; j < col.length; j++) {
var tabCell = tr.insertCell(-1);
if (j === 2) { // The last JSON column has image urls.
// Create an <img> element to show the images.
var img = document.createElement('img');
img.src = arrItems[i].Image; // The image source from JSON array.
tabCell.appendChild(img);
}
else
tabCell.innerHTML = arrItems[i][col[j]];
}
}
// Finally, add the newly created <table> with data to a container.
var divContainer = document.getElementById("showData");
divContainer.innerHTML = "";
divContainer.appendChild(table);
});
});
</script>
</html>The $.getJSON() method is used to get JSON data from a remote location using an Ajax HTTP Get request. I have used the method in the beginning of my script. The method takes a parameter in the form of a URL of the JSON file.
Once the JSON data is retrieved, I am storing the data in an array.
var arrItems = []; // The array to store JSON items. $.each(data, function (index, value) { arrItems.push(value); // Push values in the array. });
Along with other data, the array also has the image URLs. To show the text values (such as the name and id) I can use the elements innerHTML property. However, to display the images using the URLs, I have to first create an <img> element (for each record in the JSON file), and assigning the URL as source to the <img> elements, which is then added to a <table> cell.
var img = document.createElement('img'); // Create an <img> element. img.src = arrItems[i].Image; // The image source from JSON array. tabCell.appendChild(img);
