TYPESCRIPT 2.X CĂN BẢN
Hàm trong TypeScript Sử dụng hàm generics Sử dụng hàm generics trong TypeScript Sử dụng Array trong TypeScript Sử dụng Tuple trong TypeScript Sử dụng kiểu Array, Tuple, Enum trong TypeScript Interface trong Typescript Hybrid Types với Interface trong TypeScript Khác biệt khi sử dụng 'type' và 'interface' trong TypeScript Cách dùng Enum trong TypeScript Types và interface trong TypeScript Class trong TypeScript Sử dụng Abstract Classes trong TypeScript Sử dụng Interface trong Typescript (phần 2) Sử dụng Casting trong TypeScript Tìm hiểu về Generics trong TypeScript Tìm hiểu về utility types trong Typescript Utility types phổ biến trong Typescript Sử dụng default parameters trong TypeScript Modules trong TypeScript Rest Parameters trong TypeScript Sử dụng Function Overloadings trong TypeScript Sử dụng Type Assertions trong TypeScript Sử dụng Static Methods và Properties trong TypeScript. Sử dụng Access Modifiers trong TypeScript 10 mẹo và thủ thuật hay nhất trong TypeScript 5 Cách giúp bạn loại bỏ "any" trong TypeScript Mapped Types trong TypeScript Dependency Injection trong Typescript 5 ký hiệu khó hiểu cần biết trong TypeScript Cách sử dụng @ts-expect-error trong Typescript Declaration Merging trong TypeScript Tìm hiểu Branded Type trong TypeScript Namespaces trong Typescript Phân biệt Modules và Namespaces trong TypeScript Triple-Slash Directives trong TypeScript là gì? Phần 1: Biến trong TypeScript Phần 2: Biến trong TypeScript Property trong TypeScript Phân tích JSON trong TypeScript Bài tập TypeScript: Các dạng bài tập cơ bản Bài tập TypeScript: Lập trình Hướng đối tượng trong TypeScript Bài tập TypeScript: Kiểu Generic Types trong Typescript Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple. Bài tập TypeScript: Classes và Inheritance trong Typescript Bài 01: TypeScript là gì? TypeScript và Javascript Bài 02: Cài đặt TypeScript Bài 03: TypeScript Basic Types Bài 04: Khai báo biến trong TypeScript Bài 05: Lệnh If Else và Switch Case trong TypeScript Bài 06: Vòng lặp trong TypeScript
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Phân tích JSON trong TypeScript

JSON (JavaScript Object Notation) là một định dạng dữ liệu phổ biến trong lập trình, đặc biệt là trong TypeScript. Sự đơn giản, nhất quán và dễ đọc của JSON đã làm cho nó trở thành lựa chọn hàng đầu trong việc truyền tải và lưu trữ dữ liệu. Trong TypeScript, việc phân tích và tạo chuỗi JSON đôi khi là một phần quan trọng của quá trình phát triển.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Chủ đề này sẽ đưa bạn vào chi tiết về việc phân tích (parsing) và tạo chuỗi (stringifying) JSON trong TypeScript. Mình sẽ cùng nhau tìm hiểu về cách xử lý JSON phức tạp, định kiểu dữ liệu với TypeScript, và áp dụng JSON trong các kịch bản thực tế. Hãy cùng bắt đầu tìm hiểu chi tiết của JSON và TypeScript!

JSON trong TypeScript là gì?

653c9c700bef7 png

JSON (JavaScript Object Notation) là một định dạng truyền tải dữ liệu đơn giản và nhất quán, được thiết kế để dễ đọc và dễ viết cho con người, cũng như dễ phân tích và tạo ra cho máy móc. Nó là một chuỗi văn bản dựa trên cú pháp JavaScript, nhưng có thể đọc và tạo ra bởi nhiều ngôn ngữ lập trình khác.

JSON sử dụng hai cấu trúc dữ liệu chính:

Bài viết này được đăng tại [free tuts .net]

  • Object: Một tập hợp các cặp key-value, được đặt trong dấu ngoặc nhọn {}.
  • Array: Một danh sách các giá trị, được đặt trong dấu ngoặc vuông [].

Mỗi giá trị trong JSON có thể là một chuỗi, số, đối tượng, một danh sách, true, false, hoặc null.

Vai trò của JSON trong lập trình TypeScript

Vai trò của JSON trong TypeScript là không thể phủ nhận. JSON thường được sử dụng để truyền tải dữ liệu giữa các máy chủ và trình duyệt web, giữa các thành phần của ứng dụng, và thậm chí trong lưu trữ dữ liệu cục bộ.

Cụ thể trong TypeScript, JSON đóng vai trò quan trọng trong việc định dạng và trao đổi dữ liệu. TypeScript hỗ trợ tích hợp tốt với JSON thông qua khả năng định kiểu, giúp đảm bảo tính nhất quán và độ chính xác khi làm việc với dữ liệu JSON trong mã nguồn TypeScript.

JSON và TypeScript: Sự kết hợp mạnh mẽ

Sự kết hợp giữa JSON và TypeScript mang lại sức mạnh lớn cho quá trình phát triển. TypeScript có thể dễ dàng định kiểu dữ liệu từ JSON, giúp kiểm tra lỗi tại thời điểm biên dịch và cung cấp tính nhất quán khi làm việc với dữ liệu từ nhiều nguồn khác nhau.

Khả năng phân tích JSON và định kiểu trong TypeScript giúp xây dựng mã nguồn linh hoạt, dễ bảo trì, và giảm thiểu rủi ro lỗi. Sự kết hợp này tạo ra một quy trình làm việc hiệu quả và an toàn khi xử lý dữ liệu trong ứng dụng TypeScript.

Parsing JSON trong TypeScript

Sử dụng JSON.parse()

Cú pháp và cách sử dụng:

  • JSON.parse() là một phương thức trong JavaScript được sử dụng để chuyển đổi một chuỗi JSON thành một đối tượng JavaScript.
let jsonString = '{"name": "John", "age": 30}';
let personObject = JSON.parse(jsonString);

Trong TypeScript, nếu bạn không chỉ định kiểu, personObject sẽ có kiểu là any.

Xử lý lỗi khi parse JSON không hợp lệ:

  • Khi parse JSON không hợp lệ, JSON.parse() sẽ ném một lỗi. Để xử lý lỗi này, bạn có thể sử dụng cấu trúc try-catch.
let invalidJsonString = '{"name": "John", "age":}';
try {
   let invalidObject = JSON.parse(invalidJsonString);
} catch (error) {
   console.error('Error parsing JSON:', error.message);
}

Sử dụng TypeScript để định kiểu kết quả

Mô hình đối tượng từ JSON:

  • Để định kiểu cho đối tượng được tạo từ JSON, bạn có thể sử dụng TypeScript để mô hình cấu trúc đối tượng.
interface Person {
   name: string;
   age: number;
}

let jsonString = '{"name": "John", "age": 30}';
let personObject: Person = JSON.parse(jsonString);

Ép kiểu và định kiểu tường minh:

  • TypeScript cung cấp khả năng ép kiểu và định kiểu tường minh, giúp bạn kiểm soát và hiểu rõ kiểu dữ liệu của đối tượng được parse.
let jsonString = '{"name": "John", "age": 30}';
let personObject: { name: string, age: number } = JSON.parse(jsonString);

Trong trường hợp này, bạn đã định kiểu personObject một cách tường minh để biểu diễn đúng cấu trúc của JSON.

Stringifying JSON trong TypeScript

Sử dụng JSON.stringify()

Cú pháp và cách sử dụng:

  • JSON.stringify() được sử dụng để chuyển đối tượng JavaScript thành một chuỗi JSON.
let person = { name: 'John', age: 30 };
let jsonString = JSON.stringify(person);

Trong TypeScript, nếu không chỉ định các tham số tùy chọn, chuỗi JSON sẽ được tạo ra mà không có bất kỳ định kiểu nào.

Xử lý các tùy chọn formatting:

  • Bạn có thể sử dụng tham số thứ ba của JSON.stringify() để xử lý các tùy chọn định dạng, chẳng hạn như thêm khoảng trắng để làm cho định dạng trở nên dễ đọc hơn.
let person = { name: 'John', age: 30 };
let jsonString = JSON.stringify(person, null, 2);

Tùy chọn định kiểu khi stringify

Sử dụng replacer function:

  • Bạn có thể sử dụng một hàm replacer để kiểm soát cách giá trị được chuyển đổi thành chuỗi trong quá trình stringify.
let person = { name: 'John', age: 30 };
let jsonString = JSON.stringify(person, (key, value) => {
   if (key === 'name') {
      return value.toUpperCase();  // Chuyển tên thành chữ in hoa
   }
   return value;
});

Thực hành với space parameter:

  • Sử dụng tham số space để xác định số lượng khoảng trắng hoặc ký tự tab được sử dụng để định dạng đầu ra.
let person = { name: 'John', age: 30 };
let jsonString = JSON.stringify(person, null, 2);

Kết quả sẽ là:

{
  "name": "John",
  "age": 30
}

Trong trường hợp này, 2 là số lượng khoảng trắng sẽ được sử dụng.

Xử lý JSON phức tạp trong TypeScript

JSON với mảng và đối tượng lồng nhau

Parsing JSON chứa mảng:

  • Khi JSON chứa mảng, bạn có thể parse nó tương tự như đối tượng thông thường.
let jsonArrayString = '[{"name": "John", "age": 30}, {"name": "Jane", "age": 25}]';
let persons: { name: string, age: number }[] = JSON.parse(jsonArrayString);

Parsing JSON chứa đối tượng lồng nhau:

  • Khi JSON chứa đối tượng lồng nhau, bạn có thể sử dụng TypeScript để định kiểu cấu trúc đối tượng đó.
let jsonNestedObjectString = '{"person": {"name": "John", "age": 30}}';
let data: { person: { name: string, age: number } } = JSON.parse(jsonNestedObjectString);

Xử lý JSON có kiểu dữ liệu đặc biệt

Parsing và stringify cho Date objects:

  • Khi bạn có một đối tượng Date trong JSON, TypeScript sẽ không tự động chuyển đổi nó. Bạn cần thêm một hàm reviver khi parse và sử dụng toJSON() khi stringify.
// Parsing
let jsonStringWithDate = '{"date": "2023-11-10T12:30:00.000Z"}';
let dataWithDate = JSON.parse(jsonStringWithDate, (key, value) => {
   if (key === 'date') {
      return new Date(value);
   }
   return value;
});

// Stringifying
let dateObject = { date: new Date() };
let jsonStringWithDate = JSON.stringify(dateObject, (key, value) => {
   if (value instanceof Date) {
      return value.toJSON();
   }
   return value;
});

Ép kiểu cho kiểu dữ liệu đặc biệt:

  • Khi kiểu dữ liệu không phải là nguyên thuỷ, bạn có thể sử dụng TypeScript để định kiểu cụ thể.
let jsonStringWithType = '{"value": "42", "type": "number"}';
let dataWithType: { value: string, type: string } = JSON.parse(jsonStringWithType);

// Ép kiểu dữ liệu đặc biệt
if (dataWithType.type === 'number') {
   dataWithType.value = parseInt(dataWithType.value);
}

Trong trường hợp này, bạn có thể thực hiện các kiểm tra và chuyển đổi kiểu dữ liệu tùy thuộc vào giá trị của trường type.

Sử dụng JSON trong thực tế

Giao tiếp với API: Parsing và Stringifying JSON

Parsing JSON từ API:

  • Khi tương tác với API, bạn thường sẽ nhận được dữ liệu dưới dạng JSON và cần parse nó để sử dụng trong ứng dụng TypeScript.
// Giả sử có một API trả về dữ liệu như sau
// const apiResponse = '{"name": "John", "age": 30}';

let person: { name: string, age: number } = JSON.parse(apiResponse);

Stringifying JSON để gửi lên API:

  • Khi gửi dữ liệu lên API, bạn cần chuyển đối tượng TypeScript thành chuỗi JSON.
let person = { name: 'John', age: 30 };
let jsonString = JSON.stringify(person);

// Sau đó, bạn có thể sử dụng jsonString để gửi lên API

Lưu trữ dữ liệu trong Local Storage

Parsing JSON từ Local Storage:

  • Khi lưu trữ dữ liệu trong Local Storage, thường cần parse JSON khi lấy dữ liệu ra.
let storedData = localStorage.getItem('userData');
if (storedData) {
   let userData: { name: string, age: number } = JSON.parse(storedData);
}

Stringifying JSON để lưu vào Local Storage:

  • Khi lưu dữ liệu vào Local Storage, bạn cần chuyển đối tượng thành chuỗi JSON.
let userData = { name: 'John', age: 30 };
localStorage.setItem('userData', JSON.stringify(userData));

Truyền thông qua HTTP Requests: JSON trong RESTful APIs

Parsing JSON từ Response của HTTP Request:

  • Khi thực hiện các HTTP request, thường cần parse JSON từ response.
fetch('https://api.example.com/data')
   .then(response => response.json())
   .then(data => {
      // Sử dụng data ở đây
   });

Stringifying JSON để gửi qua Body của HTTP Request:

  • Khi gửi dữ liệu qua body của HTTP request, cần chuyển đối tượng thành chuỗi JSON.
let requestData = { name: 'John', age: 30 };

fetch('https://api.example.com/save', {
   method: 'POST',
   headers: {
      'Content-Type': 'application/json',
   },
   body: JSON.stringify(requestData),
});

Kết bài

Trong TypeScript, JSON không chỉ là một định dạng dữ liệu phổ biến mà còn là một phần quan trọng của nhiều kịch bản phát triển ứng dụng thực tế. Tích hợp giữa JSON và TypeScript mang lại sự linh hoạt, độ chính xác và hiệu suất cao cho quá trình phân tích và xử lý dữ liệu.

Mình đã tìm hiểu về cách phân tích và stringify JSON trong TypeScript, xử lý các tình huống phức tạp như mảng và đối tượng lồng nhau, cũng như cách đối mặt với các kiểu dữ liệu đặc biệt như Date objects. Trên cơ sở những kiến thức này, đã thấy cách tích hợp JSON trong các kịch bản thực tế như giao tiếp với API, lưu trữ trong Local Storage và truyền thông qua HTTP Requests.

Cuối cùng, mình đã xem xét các Best Practices khi phân tích JSON trong TypeScript, từ xử lý lỗi đến việc tận dụng đặc điểm của TypeScript để định kiểu dữ liệu một cách an toàn và hiệu quả. Hy vọng rằng những thông tin này sẽ giúp bạn xây dựng ứng dụng TypeScript mạnh mẽ, linh hoạt và dễ bảo trì khi làm việc với dữ liệu JSON.

Cùng chuyên mục:

Bài tập TypeScript: Classes và Inheritance trong Typescript

Bài tập TypeScript: Classes và Inheritance trong Typescript

Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple.

Bài tập TypeScript: Các kiểu dữ liệu mảng và tuple.

Bài tập TypeScript: Kiểu Generic Types trong Typescript

Bài tập TypeScript: Kiểu Generic Types trong Typescript

Bài tập TypeScript: Lập trình Hướng đối tượng trong TypeScript

Bài tập TypeScript: Lập trình Hướng đối tượng trong TypeScript

Bài tập TypeScript: Các dạng bài tập cơ bản

Bài tập TypeScript: Các dạng bài tập cơ bản

Property trong TypeScript

Property trong TypeScript

Phần 2: Biến trong TypeScript

Phần 2: Biến trong TypeScript

Phần 1: Biến trong TypeScript

Phần 1: Biến trong TypeScript

Triple-Slash Directives trong TypeScript là gì?

Triple-Slash Directives trong TypeScript là gì?

Phân biệt Modules và Namespaces trong TypeScript

Phân biệt Modules và Namespaces trong TypeScript

Tìm hiểu Branded Type trong TypeScript

Tìm hiểu Branded Type trong TypeScript

Namespaces trong Typescript

Namespaces trong Typescript

Declaration Merging trong TypeScript

Declaration Merging trong TypeScript

Cách sử dụng @ts-expect-error trong typescript

Cách sử dụng @ts-expect-error trong typescript

5 ký hiệu khó hiểu cần biết trong TypeScript

5 ký hiệu khó hiểu cần biết trong TypeScript

Dependency Injection trong Typescript

Dependency Injection trong Typescript

Mapped Types trong TypeScript

Mapped Types trong TypeScript

5 Cách giúp bạn loại bỏ

5 Cách giúp bạn loại bỏ "any" trong TypeScript

10 mẹo và thủ thuật hay nhất trong TypeScript

10 mẹo và thủ thuật hay nhất trong TypeScript

Sử dụng Access Modifiers trong TypeScript

Sử dụng Access Modifiers trong TypeScript

Top