Sử dụng JSON trong HTML bằng JavaScript

Javascript căn bản | by Học Javascript

Trong phát triển web hiện đại, việc hiển thị dữ liệu một cách linh hoạt và tương tác trực tiếp trên trình duyệt ngày càng trở nên quan trọng. Một trong những cách hiệu quả nhất để truyền và xử lý dữ liệu giữa các phần trong ứng dụng web là sử dụng JSON (JavaScript Object Notation). Với sự hỗ trợ mạnh mẽ của JavaScript, JSON không chỉ giúp lưu trữ và trao đổi thông tin giữa client và server, mà còn cho phép dễ dàng thao tác và hiển thị dữ liệu ngay trong HTML. Bài viết này sẽ hướng dẫn bạn cách sử dụng JSON trong HTML bằng JavaScript, từ việc khai báo dữ liệu đến cách hiển thị chúng lên giao diện người dùng một cách linh hoạt và trực quan.

JSON là gì?

JSON (JavaScript Object Notation) là một định dạng dữ liệu dựa trên văn bản, được sử dụng phổ biến để lưu trữ và trao đổi dữ liệu giữa máy chủ và trình duyệt, hoặc giữa các thành phần khác nhau trong ứng dụng. JSON có cú pháp đơn giản, dễ đọc và dễ hiểu đối với cả con người và máy tính.

Đặc điểm của JSON:

  • Dạng văn bản: JSON là một chuỗi văn bản thuần túy, có thể dễ dàng lưu vào tệp hoặc truyền qua mạng.

  • Cấu trúc dữ liệu rõ ràng: JSON hỗ trợ các kiểu dữ liệu cơ bản như string, number, boolean, null, array, và object.

  • Ngôn ngữ độc lập: Mặc dù được phát triển từ JavaScript, JSON là định dạng độc lập với ngôn ngữ và được hầu hết các ngôn ngữ lập trình hiện nay hỗ trợ.

Ưu điểm:

  • Dễ chuyển đổi với JavaScript: JSON có thể dễ dàng chuyển đổi qua lại giữa object JavaScript và chuỗi JSON bằng các hàm tích hợp như JSON.stringify()JSON.parse().

  • Nhẹ và hiệu quả: JSON thường nhẹ hơn XML và dễ xử lý hơn trong môi trường web.

  • Dễ học, dễ dùng: Cú pháp gần giống với khai báo object trong JavaScript, rất quen thuộc với lập trình viên frontend.

Một ví dụ JSON đơn giản:

{
  "name": "Alice",
  "age": 25,
  "isStudent": false
}

Ví dụ trên mô tả một đối tượng JSON có ba thuộc tính: name là chuỗi, age là số, và isStudent là giá trị boolean.

Nhúng dữ liệu JSON vào HTML trong JavaScript

Để sử dụng dữ liệu JSON trong trang HTML, có nhiều cách khác nhau để nhúng hoặc tải dữ liệu vào. Tùy vào nhu cầu cụ thể, bạn có thể chọn một trong các phương pháp dưới đây:

Viết trực tiếp trong mã JavaScript (biến cục bộ)

Bạn có thể khai báo một biến JavaScript và gán cho nó một đối tượng JSON (hoặc chính xác hơn là một object JavaScript viết theo cú pháp JSON):

<script>
  const userData = {
    "name": "Alice",
    "age": 25,
    "isStudent": true
  };

  console.log(userData.name); // In ra: Alice
</script>

Ưu điểm: Nhanh chóng, đơn giản, không cần thao tác ngoài.

Nhược điểm: Không tách biệt dữ liệu và logic, không phù hợp với dữ liệu lớn hoặc từ server.

Nhúng trong thẻ <script type="application/json">

Đây là cách tách dữ liệu ra khỏi logic JavaScript nhưng vẫn nằm trong cùng một tệp HTML. Dữ liệu được nhúng trong một thẻ <script> với thuộc tính type="application/json", sau đó bạn có thể đọc và xử lý trong JavaScript.

<script type="application/json" id="json-data">
  {
    "title": "Sách hay",
    "author": "Nguyễn Văn A"
  }
</script>

<script>
  const jsonText = document.getElementById("json-data").textContent;
  const book = JSON.parse(jsonText);
  console.log(book.title); // In ra: Sách hay
</script>

Hiển thị dữ liệu JSON trong HTML bằng JavaScript

Khi bạn đã có dữ liệu JSON, bạn cần đọc, phân tíchhiển thị nó lên giao diện HTML. Dưới đây là các bước cụ thể:

Cách đọc và phân tích dữ liệu JSON (sử dụng JSON.parse())

Nếu dữ liệu JSON ở dạng chuỗi (string), bạn cần dùng JSON.parse() để chuyển thành đối tượng JavaScript:

const jsonString = '{"name": "Alice", "age": 25}';
const user = JSON.parse(jsonString);
console.log(user.name); // Alice

Lưu ý: Nếu dữ liệu đã là object (ví dụ từ biến JavaScript hoặc fetch đã parse), không cần dùng JSON.parse().

Cách truy cập dữ liệu từ object hoặc array JSON

Đối tượng đơn (Object):

const user = {
  name: "Alice",
  age: 25
};

console.log(user.name); // Alice

Mảng đối tượng (Array of objects):

const users = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 30 }
];

console.log(users[1].name); // Bob

Sử dụng DOM để gắn dữ liệu vào HTML

Bạn có thể hiển thị dữ liệu bằng cách thao tác DOM:

Sử dụng innerHTML:

<div id="output"></div>

<script>
  const user = { name: "Alice", age: 25 };
  document.getElementById("output").innerHTML = `Tên: ${user.name} - Tuổi: ${user.age}`;
</script>

Tạo phần tử mới (createElement, appendChild):

const users = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 30 }
];

const container = document.getElementById("output");

users.forEach(user => {
  const p = document.createElement("p");
  p.textContent = `${user.name} (${user.age} tuổi)`;
  container.appendChild(p);
});

Ví dụ thực tế JSON trong HTML bằng JavaScript

Ví dụ 1: Nhúng JSON trực tiếp và hiển thị lên bảng HTML

<table id="userTable" border="1">
  <tr><th>Tên</th><th>Tuổi</th></tr>
</table>

<script>
  const users = [
    { name: "Alice", age: 25 },
    { name: "Bob", age: 30 }
  ];

  const table = document.getElementById("userTable");
  users.forEach(user => {
    const row = document.createElement("tr");
    row.innerHTML = `<td>${user.name}</td><td>${user.age}</td>`;
    table.appendChild(row);
  });
</script>

Ví dụ 2: Nhúng JSON trong thẻ <script type="application/json">

<script type="application/json" id="user-json">
  [
    { "name": "Alice", "age": 25 },
    { "name": "Bob", "age": 30 }
  ]
</script>

<div id="list"></div>

<script>
  const raw = document.getElementById("user-json").textContent;
  const users = JSON.parse(raw);
  const div = document.getElementById("list");

  users.forEach(u => {
    div.innerHTML += `<p>${u.name} - ${u.age} tuổi</p>`;
  });
</script>

Ví dụ 3: Dùng fetch() để lấy JSON từ file/server và hiển thị

<div id="productList"></div>

<script>
  fetch('products.json') // Giả sử có file products.json trên cùng thư mục
    .then(res => res.json())
    .then(data => {
      const container = document.getElementById("productList");
      data.forEach(product => {
        const item = document.createElement("p");
        item.textContent = `${product.name} - Giá: ${product.price}₫`;
        container.appendChild(item);
      });
    });
</script>

Lưu ý: File products.json cần tồn tại và chứa nội dung hợp lệ như:

[
  { "name": "Sách A", "price": 120000 },
  { "name": "Sách B", "price": 90000 }
]

Xử lý sự kiện kết hợp với dữ liệu JSON trong HTML bằng JavaScript

Khi sử dụng JSON trong HTML, bạn có thể kết hợp với các sự kiện tương tác của người dùng như click, nhập liệu, chọn dropdown… để hiển thị, lọc hoặc thay đổi dữ liệu một cách linh hoạt.

Thêm sự kiện click để lọc dữ liệu JSON và hiển thị kết quả

Giả sử bạn có một danh sách sản phẩm, và bạn muốn hiển thị những sản phẩm thuộc một danh mục khi người dùng click vào nút:

<button onclick="filterCategory('sach')">Sách</button>
<button onclick="filterCategory('dochoi')">Đồ chơi</button>

<div id="result"></div>

<script>
  const products = [
    { name: "Sách Toán", category: "sach" },
    { name: "Búp bê", category: "dochoi" },
    { name: "Sách Văn", category: "sach" }
  ];

  function filterCategory(category) {
    const filtered = products.filter(p => p.category === category);
    const resultDiv = document.getElementById("result");
    resultDiv.innerHTML = ""; // Xóa nội dung cũ
    filtered.forEach(p => {
      resultDiv.innerHTML += `<p>${p.name}</p>`;
    });
  }
</script>

Kết hợp với form/input để tìm kiếm hoặc lọc dữ liệu

Ví dụ: Tìm người dùng theo tên từ dữ liệu JSON:

<input type="text" id="search" placeholder="Tìm tên..." />
<button onclick="searchUser()">Tìm</button>

<div id="output"></div>

<script>
  const users = [
    { name: "Alice", age: 25 },
    { name: "Bob", age: 30 },
    { name: "Charlie", age: 22 }
  ];

  function searchUser() {
    const keyword = document.getElementById("search").value.toLowerCase();
    const results = users.filter(u => u.name.toLowerCase().includes(keyword));
    const out = document.getElementById("output");
    out.innerHTML = results.map(u => `<p>${u.name} - ${u.age} tuổi</p>`).join('');
  }
</script>

Kết hợp với dropdown để lọc dữ liệu

<select onchange="filterByAge(this.value)">
  <option value="">Chọn tuổi</option>
  <option value="25">25</option>
  <option value="30">30</option>
</select>

<div id="list"></div>

<script>
  const users = [
    { name: "Alice", age: 25 },
    { name: "Bob", age: 30 },
    { name: "David", age: 25 }
  ];

  function filterByAge(age) {
    const filtered = age ? users.filter(u => u.age == age) : users;
    const list = document.getElementById("list");
    list.innerHTML = filtered.map(u => `<p>${u.name} - ${u.age}</p>`).join('');
  }
</script>

Một số lưu ý khi dùng JSON trong HTML bằng JavaScript

Dưới đây là một số điểm quan trọng cần nhớ khi thao tác với JSON trong HTML thông qua JavaScript:

Đảm bảo định dạng JSON hợp lệ

  • JSON phải có cấu trúc chính xác: dùng dấu ngoặc nhọn {} cho object, dấu ngoặc vuông [] cho array.

  • Các key phải được đặt trong dấu "" (double quotes).

  • Không được có dấu phẩy cuối dòng trong mảng hoặc object.

Đúng:

{ "name": "Alice", "age": 25 }

Sai:

{ name: 'Alice', age: 25, } // sai chuẩn JSON

Cẩn thận với JSON.parse()

  • Khi dùng JSON.parse(), nếu chuỗi không hợp lệ → trình duyệt sẽ báo lỗi và dừng chương trình.

  • Nên luôn kiểm tra trước khi parse hoặc dùng try...catch:

try {
  const obj = JSON.parse(data);
} catch (e) {
  console.error("Lỗi khi phân tích JSON:", e);
}

Không nên nhúng chuỗi JSON dài vào HTML nếu không cần thiết

  • Tránh viết trực tiếp chuỗi JSON lớn trong HTML vì khó bảo trì và dễ gây lỗi cú pháp.

  • Ưu tiên lưu ở file .json riêng hoặc lấy từ API/backend.

Đảm bảo an toàn khi xử lý dữ liệu JSON từ nguồn bên ngoài

  • Dữ liệu JSON từ server có thể chứa mã độc nếu không được kiểm soát kỹ.

  • Khi hiển thị nội dung, tránh dùng innerHTML nếu dữ liệu đến từ bên ngoài. Thay vào đó, dùng textContent để phòng tránh XSS:

const p = document.createElement("p");
p.textContent = jsonData.name; // an toàn hơn innerHTML

Ứng dụng thực tế của JSON trong HTML bằng JavaScript

Việc sử dụng JSON trong HTML kết hợp với JavaScript rất phổ biến trong các ứng dụng web hiện đại, đặc biệt là trong các giao diện động, nơi dữ liệu được tải và hiển thị một cách linh hoạt. Dưới đây là một số ví dụ thực tế giúp bạn hình dung rõ hơn cách ứng dụng JSON:

Hiển thị dữ liệu sản phẩm trong website thương mại điện tử

Trong các website bán hàng, dữ liệu sản phẩm thường được lưu trữ dưới dạng JSON để dễ dàng hiển thị và cập nhật.

Ví dụ:

[
  { "id": 1, "name": "Áo thun nam", "price": 199000 },
  { "id": 2, "name": "Quần jeans nữ", "price": 399000 }
]

JavaScript hiển thị:

fetch('products.json')
  .then(res => res.json())
  .then(products => {
    const list = document.getElementById("productList");
    products.forEach(p => {
      const item = document.createElement("div");
      item.innerHTML = `<h4>${p.name}</h4><p>Giá: ${p.price}đ</p>`;
      list.appendChild(item);
    });
  });

Hiển thị danh sách bài viết/blog từ file JSON

Các blog hoặc trang tin tức có thể sử dụng JSON để lưu danh sách bài viết và hiển thị trên giao diện người dùng.

Ví dụ:

[
  { "title": "Cách sử dụng JSON", "author": "Admin", "date": "2025-04-01" },
  { "title": "Hướng dẫn JavaScript nâng cao", "author": "Dũng", "date": "2025-04-05" }
]

JavaScript hiển thị:

fetch('posts.json')
  .then(res => res.json())
  .then(posts => {
    const blog = document.getElementById("blog");
    posts.forEach(p => {
      blog.innerHTML += `<article><h3>${p.title}</h3><small>${p.date} - ${p.author}</small></article>`;
    });
  });

Bảng thống kê, biểu đồ từ dữ liệu JSON động

Các ứng dụng như dashboard quản trị, thống kê người dùng, doanh thu… thường dùng JSON để lấy dữ liệu và hiển thị bằng biểu đồ hoặc bảng động.

Ví dụ JSON:

{
  "months": ["Tháng 1", "Tháng 2", "Tháng 3"],
  "sales": [100, 150, 120]
}

Hiển thị biểu đồ với Chart.js:

<canvas id="salesChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  fetch('sales.json')
    .then(res => res.json())
    .then(data => {
      new Chart(document.getElementById("salesChart"), {
        type: 'bar',
        data: {
          labels: data.months,
          datasets: [{
            label: 'Doanh thu',
            data: data.sales,
            backgroundColor: 'rgba(54, 162, 235, 0.6)'
          }]
        }
      });
    });
</script>

Những ứng dụng trên cho thấy tính linh hoạt và phổ biến của JSON trong việc tạo ra giao diện web động, thân thiện và dễ mở rộng. JSON đóng vai trò như cầu nối giữa dữ liệu và HTML, giúp việc xây dựng UI trở nên hiệu quả hơn rất nhiều.

Kết bài

Việc sử dụng JSON trong HTML bằng JavaScript đã trở thành một phương pháp cực kỳ hiệu quả và phổ biến trong việc phát triển các ứng dụng web hiện đại. Từ việc lưu trữ và truyền tải dữ liệu, đến việc hiển thị và tương tác với người dùng, JSON mang lại sự linh hoạt và dễ dàng trong xử lý thông tin. Với các phương pháp như nhúng JSON trực tiếp trong mã JavaScript, lấy dữ liệu từ file hoặc server qua fetch(), bạn có thể dễ dàng xây dựng các giao diện động và tương tác mà không gặp phải khó khăn gì.

Các ứng dụng thực tế như hiển thị dữ liệu sản phẩm, quản lý bài viết/blog hay thống kê biểu đồ đều có thể tận dụng JSON để giúp các ứng dụng trở nên mạnh mẽ và dễ dàng bảo trì. Tuy nhiên, khi làm việc với JSON, bạn cần chú ý đến việc đảm bảo định dạng JSON hợp lệ và xử lý dữ liệu an toàn để tránh các lỗi không mong muốn.

Với những gì đã trình bày trong bài, bạn đã có một cái nhìn tổng quan về cách sử dụng JSON trong HTML và JavaScript, từ cơ bản đến các ứng dụng thực tế. Hy vọng bạn sẽ áp dụng được kiến thức này vào dự án của mình để tạo ra các trải nghiệm web tuyệt vời và hiệu quả!

Bài viết liên quan