hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Dart Programming Basic
JSON trong Dart

JSON trong Dart

  • 07-06-2024
  • Toanngo92
  • 0 Comments

Mục lục

  • Phân tích JSON trong Dart
  • Hiểu cấu trúc của một Tài liệu JSON
  • Mã hóa và Giải mã JSON trong Dart
  • Giải mã JSON với Dart
  • Phân tích JSON thành Lớp Model
  • Constructor Factory
  • Serialization với toJson()

Phân tích JSON trong Dart

JavaScript Object Notation (JSON) là một tiêu chuẩn mở nhẹ, dựa trên văn bản, được thiết kế và phát triển cho việc trao đổi dữ liệu có thể đọc được bởi con người. Douglas Crockford chỉ định định dạng JSON, cũng được mô tả trong RFC 4627. Application/JSON là loại phương tiện truyền thông Internet chính thức cho JSON và .json là phần mở rộng cho tên tệp JSON.

JSON, được xuất phát từ JavaScript, là một định dạng dữ liệu độc lập với ngôn ngữ. Nó được bao gồm trong nhiều ngôn ngữ lập trình hiện đại như Dart, để tạo ra và phân tích dữ liệu định dạng JSON.

Việc phân tích JSON thường được sử dụng trong các ứng dụng để lấy dữ liệu từ Internet.

Tùy thuộc vào lượng dữ liệu JSON phải được xử lý, có hai lựa chọn:

Phân tích mã JSON thủ công đòi hỏi các quy trình sau:

Mã phân tích JSON được viết bằng tay có thể tốn nhiều thời gian và có thể gặp lỗi nếu có nhiều lớp mô hình.

Trong trường hợp như vậy, các công cụ tạo mã có thể được sử dụng như sau:

Hiểu cấu trúc của một Tài liệu JSON

Mã bên dưới dưới đây cho thấy cấu trúc của một tài liệu JSON.

Mã mẫu 1: product_data.json

{
  "productName": "Suit",
  "brand": "Armani",
  "price": 4.5,
  "review": "Superb brand!",
  "rating": 5.0,
  "comment": "Amazing fabric and look!"
}

Một tài liệu JSON đại diện cho một bản đồ các cặp khóa-giá trị.

Dữ liệu JSON có thể chứa cả bản đồ các cặp khóa-giá trị sử dụng {} và danh sách sử dụng [] được phân tách bằng dấu hai chấm :. Mỗi cặp khóa-giá trị được phân tách bằng dấu phẩy ,. Các bộ sưu tập lồng nhau được tạo ra với sự kết hợp của hai loại này, đại diện cho một cấu trúc phức tạp trong JSON.

Một cặp khóa-giá trị bao gồm một khóa và một giá trị, được phân tách bằng dấu hai chấm :. Khóa là một chuỗi, định danh cho cặp khóa-giá trị. Giá trị có thể là bất kỳ loại dữ liệu nào được liệt kê trong Bảng bên dưới.

Loại dữ liệu trong JSONMô tả
Stringđược bao quanh bởi dấu ngoặc [” “]
NumberCác giá trị số nguyên
FloatSố thực
ArrayMảng (danh sách các giá trị)
ObjectĐối tượng (bản đồ khóa-giá trị)
BooleanĐúng hoặc sai
EmptyNull (không có giá trị)

Một đối tượng JSON có thể được nhìn thấy với các khóa productName, brand, và reviews như là danh sách bên trong một tài liệu JSON. Bên trong danh sách reviews, có hai khóa gồm rating và review.

Mã hóa và Giải mã JSON trong Dart

Khi gửi một phản hồi JSON qua mạng, toàn bộ dữ liệu được mã hóa thành một chuỗi.

Mã bên dưới cho thấy JSON được mã hóa dưới dạng chuỗi.

main.dart

final json = '{"productName": "Suit", "brand": "Armani", "reviews": [{"rating": 4.5, "review": "Superb brand!"}, {"rating": 5.0, "review": "Amazing fabric and look!"}]}';

JSON đã được mã hóa này phải được giải mã để sử dụng trong ứng dụng của người dùng.

Dữ liệu JSON phải được mã hóa hoặc serialized trước khi gửi nó qua mạng. Quá trình này của việc biến đổi cấu trúc dữ liệu thành một chuỗi được gọi là Mã hóa.

Khi dữ liệu JSON được nhận dưới dạng một chuỗi từ mạng, nó phải được giải mã hoặc deserialized. Quá trình này của việc deserializing dữ liệu được gọi là Giải mã.

Giải mã JSON với Dart

Mã bên dưới đây thể hiện cách giải mã JSON với Dart

import "dart:convert";

main() {
  final json = '{"productName": "Suit", "brand": "Armani"}';
  final parsedJson = jsonDecode(json);
  print('${parsedJson.runtimeType} : $parsedJson');
}

Trong Đoạn mã trên, một gói Dart được sử dụng để giải mã dữ liệu JSON. Biến json đại diện cho dữ liệu phản hồi nhận được từ mạng. Chuỗi json sẽ được giải mã thành JSON bằng hàm jsonDecode() trong gói Dart. Cuối cùng, kết quả cho JSON đã được giải mã sẽ được in ra.

Hình bên dưới thể hiện kết quả trên terminal khi thực thi mã trong Đoạn mã trên.

Phân tích JSON thành Lớp Model

Dart là một ngôn ngữ có kiểu tĩnh. Do đó, việc chuyển đổi dữ liệu JSON thành các lớp model là rất quan trọng. Các lớp model này đại diện cho các đối tượng trong thế giới thực và tận dụng hệ thống kiểu dữ liệu. Các giá trị trong dữ liệu JSON cần được nghiên cứu và một lớp Dart với tất cả các giá trị trong đối tượng JSON nên được tạo ra.

Trong Đoạn mã dưới đây, có hai khóa, productName và brand, cả hai đều thuộc loại string, vì vậy, một lớp Product mới có thể được tạo ra trong Dart để đại diện cho dữ liệu này và các biến này có thể được thêm vào đó như được hiển thị trong Đoạn mã tiếp theo. Sau đó, các phương thức nhà máy phải được sử dụng để ánh xạ dữ liệu JSON vào đối tượng mô hình Dart.

product_data.json

{
  "productName": "Suit",
  "brand": "Armani"
}

Trong Đoạn mã tiếp theo, một lớp mô hình Products đã được tạo ra có thể được sử dụng để giải mã dữ liệu JSON.

main.dart

class Products {
  Products(this.productName, this.brand);
  final String productName;
  final String brand;
}

Đoạn mã tiếp theo hiển thị một đoạn mã mô tả cách dữ liệu JSON có thể được đọc bằng cách sử dụng lớp mô hình thay vì parsedJson['productName'] và parsedJson['brand'].

main.dart

products.productName
products.brand

Constructor Factory

Việc phân tích cú pháp JSON được thực hiện bằng Constructor Factory và nó cho phép người dùng tạo biến và thực hiện xác thực trước khi kết quả được trả về.

Constructor Factory được sử dụng khi có một thể hiện của một lớp trong bộ nhớ mà ngăn không cho việc tạo một thể hiện mới mỗi khi lớp được sử dụng.

Nói cách khác, một constructor factory sẽ trả về một đối tượng đã được tạo trước đó, từ đó, cải thiện bộ nhớ và hiệu suất, trong khi một constructor sẽ tạo một thể hiện mới mỗi lần.

main.dart

import 'dart:convert';

class Products {
  Products(this.productName, this.brand);
  final String productName;
  final String brand;

  factory Products.fromJson(Map<String, dynamic> data) {
    final productName = data['productName'] as String;
    final brand = data['brand'] as String;
    return Products(productName: productName, brand: brand);
  }
}

void main() {
  final json = '{"productName": "Suit", "brand": "Armani"}';
  final parsedJson = jsonDecode(json);
  final products = Products.fromJson(parsedJson);
  print(products.productName);
  print(products.brand);
}

Trong Đoạn mã trên, một Constructor Factory đã được tạo ra cho lớp Products. Các biến productName và brand được gán cho dữ liệu JSON tương ứng là productName và brand.

Serialization với toJson()

Việc phân tích dữ liệu JSON rất hữu ích, nhưng đôi khi, tùy thuộc vào tình huống, một đối tượng mô hình phải được chuyển đổi trở lại dữ liệu JSON để gửi qua mạng. Để thực hiện điều này, hãy sử dụng hàm toJson() trong Dart.

main.dart

import 'dart:convert';

class Products {
  Products(this.productName, this.brand);
  final String productName;
  final String brand;
  
  Map<String, dynamic> toJson() {
    return {
      'productName': productName,
      'brand': brand,
    };
  }
}

void main() {
  final products = Products("Suit", "Versache");
  final jsonMap = products.toJson();
  final encodedJson = jsonEncode(jsonMap);
  print(encodedJson);
}

Đoạn mã trên bao gồm một lớp Products và một phương thức toJson() được định nghĩa cho Products. Phương thức toJson() trả về một bản đồ chứa các cặp khóa-giá trị không rỗng. Trong hàm main(), đối tượng của lớp Products được tạo với các giá trị cho productName và brand. Đối tượng này sau đó được chuyển đổi thành một bản đồ sử dụng phương thức toJson() và lưu vào một biến được gọi là jsonMap. jsonMap này sau đó được mã hóa thành một chuỗi JSON bằng cách sử dụng phương thức jsonEncode(). Giá trị cho chuỗi JSON được mã hóa này sau đó được in ra trên console.

Hình bên dưới trình bày kết quả đầu ra trên cửa sổ terminal khi thực thi mã trong Đoạn mã trên.

Bài viết liên quan:

Packages trong Dart
Lập Trình Đồng Bộ và Bất Đồng Bộ trong Dart
Collections và Ngoại lệ trong Dart
Lập trình hướng đối tượng trong Dart
Toán tử và Câu lệnh Điều khiển trong Dart
Biến và kiểu dữ liện trong Dart
Giới Thiệu Về Ngôn Ngữ Lập Trình Dart Cơ Bản

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

4. KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×