Displaying Content On The Webpage Using A Local JSON File.....
Tags: beginners, javascript, codenewbie, webdev
Published: 2021-02-07 19:18:10

Want to learn and experiment with how data gets exchanged between different files using JSON locally with a small practice project?

For the next few minutes, please forget about JaSON (Statham) from the "The Transporter" and "Fast & Furious"- and just read on, and then later code on. By the end, you will say you know little bit of another JSON, I promise. Okay, that's a bad joke. 
 
I made this simple project to understand how this works with a local JSON file.  


### Some Fast & Furious Bytes about JSON. 
* JSON stands for **J**ava **S**cript **O**bject **N**otation 
* JSON is a complete platform and language independent. 
* JSON is a text based format file, So it's easy to read and understand even for non-coders. 
* JSON mostly used for asynchronous transactions.
* We can convert any Javascript Object into JSON and send it to the server. Server will then process it and send it back to the Javascript in JSON format. 

Project Demo: [Render JSON](https://render-json-locally.netlify.app/)

Project Snapshot: 
![Render JSON](https://i.imgur.com/PcuvQyC.png)

Here is the Project's Source Code:  

index.html
```html
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>JavaScript JSON List</title>
  <link rel="stylesheet" href="style.css">
</head>

<body>
  <div>
    <h1>[ Displaying Content On The Webpage From Local JSON File ]</h1>
  </div>
  <hr />
  <div class="output"></div>
  <script src="app.js"></script>
</body>

</html>
```
style.css
```css
body {
  font-family: 'Roboto', sans-serif;
  background-color: #070116;
}

div {
  text-align: center;
  background-color: rgb(41, 216, 216);
  padding: 10px;
}

.output {
  text-align: center; 
  color: white; 
  font-size: 20px;
}

.active {
  margin: 40px;
  padding: 50px;
  font-size: 20px;
  color: white;
  letter-spacing: 2px;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  background-image: linear-gradient( 160deg, #ff0000, #ec008c );
  border-radius: 30px;
  cursor: pointer;
}
```

local.json
```json
[
  {
    "firstName": "Shash",
    "lastName": "WebDev",
    "gender": "male",
    "age": 35,
    "address": {
      "streetAddress": "123",
      "city": "Greater Manchester",
      "postalCode": "M32"
    },
    "phoneNumbers": [{ "type": "home", "number": "123456789" }]
  },
  {
    "firstName": "Rihan",
    "lastName": "Anne",
    "gender": "Female",
    "age": 28,
    "address": {
      "streetAddress": "019",
      "city": "Dublin",
      "postalCode": "D01"
    },
    "phoneNumbers": [{ "type": "home", "number": "238047651" }]
  },
  {
    "firstName": "John",
    "lastName": "Smith",
    "gender": "male",
    "age": 38,
    "address": {
      "streetAddress": "456",
      "city": "London",
      "postalCode": "E1"
    },
    "phoneNumbers": [{ "type": "home", "number": "987654321" }]
  },
  {
    "firstName": "Kelly",
    "lastName": "Brokes",
    "gender": "Female",
    "age": 32,
    "address": {
      "streetAddress": "789",
      "city": "Glasgow",
      "postalCode": "G1"
    },
    "phoneNumbers": [{ "type": "home", "number": "345672198" }]
  }
]
```
app.js
```javascript
"use strict";

const output = document.querySelector(".output");
//console.log(output); // <div class="output"></div>

//output.textContent = "New Content";
//console.log(output); // <div class="output">New content</div>

// Storing json data in a variable
const localJsonFile = "local.json";

// The DOMContentLoaded event fires when the initial HTML document has been completely loaded and parsed,
// without waiting for stylesheets, images, and subframes to finish loading.
window.addEventListener("DOMContentLoaded", () => {
  // console.log('DOM fully loaded and parsed');
  output.textContent = "Loading....";
  // Make fetch request to local.json file
  fetch(localJsonFile)
    .then((response) => response.json()) // and the response we get is in json format
    .then((data) => {
      // we call that data here
      // console.log(data); // check the data on the console
      output.innerHTML = ""; // Initial content is empty
      data.forEach((el) => {
        // loop through the json data using forEach method
        // console.log(el);
        jsonList(el); // calling jsonList function
      });
    });
});

// Create a function to display the json data dynamically on the webpage
function jsonList(item) {
  // Create a new div element dynamically
  const div = document.createElement("div");
  // get the required details from the local.json file to the div element using innerHTML
  div.innerHTML = `
        ${item.firstName} ${item.lastName} is a ${item.gender} of ${item.age},
        resides in ${item.address["streetAddress"]} ${item.address["city"]} ${item.address["postalCode"]}
        with a contact number ${item.phoneNumbers[0]["number"]}.`;
  // attach the newly created div element to the original div element, in this case to the class '.output'
  output.append(div);
  // Add styling to the displayed content
  div.classList.add("active");
}

```
If you want to experiment, just add some content to local.json file and see how it updates the webpage dynamically. 

Happy C❤️ding!!