Sau khi đã nắm vững các khái niệm nền tảng và cách làm việc với JSON trong Python bao gồm cách đọc và ghi dữ liệu, chuyển đổi giữa các định dạng dữ liệu và lưu trữ JSON, bạn sẽ tiếp tục khám phá những ứng dụng thực tế của JSON trong Python, giúp bạn áp dụng những kiến thức đã biết vào các dự án cụ thể.

Ở bài viết JSON Python phần 1: Thao tác JSON cơ bản với Python, chúng ta đã đi qua các kiến thức về:

  • Đọc file JSON
  • Viết dữ liệu vào file JSON
  • Chuyển đổi từ Python sang JSON
  • Lưu trữ JSON
  • Công cụ định dạng JSON

Còn ở bài viết này, bạn sẽ hiểu rõ thêm các ứng dụng thực tế của JSON trong Python qua các chủ đề:

  • Cập nhật nội dung web: Tự động cập nhật thông tin trên trang web từ các nguồn dữ liệu JSON.
  • Ghi log: Sử dụng JSON để ghi log và theo dõi hoạt động của ứng dụng.
  • Phát triển API: Xây dựng và triển khai API sử dụng JSON để trao đổi dữ liệu.
  • Web scraping: Thu thập và xử lý dữ liệu từ các trang web dưới dạng JSON.
  • Phát triển backend với Flask hoặc Django: Quản lý và xử lý dữ liệu JSON trong các ứng dụng web backend.

Bài viết này dành cho những lập trình viên Python đã có kiến thức căn bản và những ai đang sử dụng Python cho các công việc như Data Engineering, Web Scraping, hoặc phát triển backend với các framework xịn sò như Flask hay Django. Hãy cùng bắt đầu hành trình khám phá JSON với Python nào!

Đọc thêm: JSON là gì? Các loại dữ liệu JSON là gì và áp dụng thế nào?

Cập nhật nội dung web

Trong thời đại số hóa hiện nay, việc cập nhật nội dung web một cách tự động là điều cần thiết để giữ cho trang web của bạn luôn mới mẻ và hấp dẫn. Python, với các thư viện mạnh mẽ như requestsBeautifulSoup, cho phép bạn dễ dàng lấy dữ liệu từ các nguồn khác nhau và cập nhật nội dung web.

Ví dụ, bạn có thể lấy thông tin thời tiết từ một API và hiển thị nó trên trang web của mình:

import requests
import json

url = "https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London"
response = requests.get(url)
weather_data = response.json()

# Giả sử bạn có một hàm update_web_content() để cập nhật nội dung web
update_web_content(weather_data)

Bạn có thể tham khảo chi tiết cách tạo một app thời tiết bằng video sau: Build a Weather App with JavaScript & WeatherAPI.com | Step-by-Step Tutorial

Giải thích code

  • import requests: Thư viện requests dùng để gửi yêu cầu HTTP.
  • import json: Thư viện json dùng để xử lý dữ liệu JSON.
  • url=”https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=London”: Đặt URL của API cung cấp thông tin thời tiết.
  • response = requests.get(url): Gửi yêu cầu GET tới API và nhận phản hồi.
  • weather_data = response.json(): Chuyển đổi phản hồi JSON thành đối tượng Python.
  • update_web_content(weather_data): Hàm giả định để cập nhật nội dung web với dữ liệu thời tiết.

Logging

Ghi log là một phần không thể thiếu trong quá trình phát triển và vận hành ứng dụng. Python cung cấp module logging tích hợp sẵn, cho phép bạn ghi log dưới dạng JSON. Điều này giúp bạn dễ dàng lưu trữ và phân tích log:

import logging
import json_log_formatter

formatter = json_log_formatter.JSONFormatter()
json_handler = logging.FileHandler(filename='app.log')
json_handler.setFormatter(formatter)

logger = logging.getLogger('my_json_logger')
logger.addHandler(json_handler)
logger.setLevel(logging.INFO)

logger.info("Application started", extra={"key": "value"})

Giải thích code

  • import logging: Thư viện logging dùng để ghi log.
  • import json_log_formatter: Thư viện json_log_formatter để định dạng log dưới dạng JSON.
  • formatter = json_log_formatter.JSONFormatter(): Tạo formatter để định dạng log thành JSON.
  • json_handler = logging.FileHandler(filename=’app.log’): Tạo handler để ghi log vào file app.log.
  • json_handler.setFormatter(formatter): Đặt formatter cho handler.
  • logger = logging.getLogger(‘my_json_logger’): Tạo logger với tên ‘my_json_logger’.
  • logger.addHandler(json_handler): Thêm handler vào logger.
  • logger.setLevel(logging.INFO): Đặt mức log là INFO.
  • logger.info(“Application started”, extra={“key”: “value”}): Ghi log thông tin với message và dữ liệu bổ sung.

Phát triển API

Phát triển API là một trong những ứng dụng phổ biến của Python trong việc xử lý JSON. Sử dụng các framework như Flask hay Django, bạn có thể dễ dàng xây dựng và triển khai các API để trao đổi dữ liệu dưới dạng JSON.

Dưới đây là ví dụ đơn giản với Flask:

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
    data = {"message": "Hello, world!"}
    return jsonify(data)

@app.route('/api/data', methods=['POST'])
def post_data():
    new_data = request.get_json()
    return jsonify(new_data), 201

if __name__ == '__main__':
    app.run(debug=True)

Giải thích code

  • from flask import Flask, jsonify, request: Import các module cần thiết từ Flask.
  • app = Flask(__name__): Tạo một ứng dụng Flask.
  • @app.route(‘/api/data’, methods=[‘GET’]): Định nghĩa route cho phương thức GET.
  • def get_data(): Hàm xử lý yêu cầu GET.
  • data = {“message”: “Hello, world!”}: Tạo dữ liệu JSON để trả về.
  • return jsonify(data): Trả về dữ liệu dưới dạng JSON.
  • @app.route(‘/api/data’, methods=[‘POST’]): Định nghĩa route cho phương thức POST.
  • def post_data(): Hàm xử lý yêu cầu POST.
  • new_data = request.get_json(): Lấy dữ liệu JSON từ yêu cầu POST.
  • return jsonify(new_data), 201: Trả về dữ liệu mới với mã trạng thái 201 (Created).
  • if __name__ == ‘__main__’: app.run(debug=True): Chạy ứng dụng Flask ở chế độ debug.

Web scraping

Web scraping là kỹ thuật thu thập dữ liệu từ các trang web. Với Python và thư viện BeautifulSoup, bạn có thể dễ dàng lấy dữ liệu và chuyển đổi nó thành JSON để lưu trữ hoặc xử lý thêm:

import requests
from bs4 import BeautifulSoup
import json

url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

data = {"title": soup.title.string}
print(json.dumps(data, indent=4))

Hình này là một ví dụ khi bạn cần lấy các nội dung trên một website. Web scraping là một kỹ năng phức tạp và có nhiều kỹ thuật khác nhau cho mỗi trang web khác nhau. Đôi khi yếu tố đạo đức và sở hữu trí tuệ cũng là điều mà bạn nên cân nhắc khi dùng kỹ thuật này vì bạn có thể gặp phải những rủi ro pháp lý.

Giải thích code

  • import requests: Thư viện requests để gửi yêu cầu HTTP.
  • from bs4 import BeautifulSoup: Thư viện BeautifulSoup để phân tích cú pháp HTML.
  • import json: Thư viện json để xử lý dữ liệu JSON.
  • url = ‘https://example.com’: Đặt URL của trang web cần scraping.
  • response = requests.get(url): Gửi yêu cầu GET tới trang web.
  • soup = BeautifulSoup(response.content, ‘html.parser’): Phân tích nội dung HTML của trang web.
  • data = {“title”: soup.title.string}: Tạo đối tượng JSON với tiêu đề trang web.
  • print(json.dumps(data, indent=4)): In dữ liệu JSON với định dạng đẹp.

Khi nào nên sử dụng Flask và Khi nào nên sử dụng Django?

Python không chỉ mạnh mẽ trong việc phát triển API mà còn cực kỳ hiệu quả trong việc xây dựng backend cho các ứng dụng web. Flask và Django là hai framework phổ biến nhất giúp bạn dễ dàng quản lý dữ liệu JSON trong các ứng dụng của mình.

Flask

Nên sử dụng Flask khi:

  • Dự án nhỏ và đơn giản: Flask phù hợp với các dự án nhỏ, yêu cầu đơn giản và không cần nhiều tính năng phức tạp. Ví dụ, một API nhỏ hoặc một ứng dụng web đơn giản có thể được xây dựng nhanh chóng với Flask.
  • Kiểm soát linh hoạt: Flask cung cấp sự linh hoạt cao, cho phép lập trình viên tự do lựa chọn các thành phần và công cụ khác để xây dựng ứng dụng. Điều này hữu ích khi bạn cần tùy chỉnh nhiều và không muốn bị ràng buộc bởi một framework cố định.
  • Tìm hiểu và học tập: Flask có cú pháp đơn giản và dễ học, là một lựa chọn tốt cho người mới bắt đầu học về lập trình web và xây dựng API.

Với Flask, bạn có thể dễ dàng xử lý các yêu cầu JSON và trả về kết quả dưới dạng JSON:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/json', methods=['POST'])
def json_example():
    request_data = request.get_json()
    name = request_data.get('name')
    age = request_data.get('age')
    
    response = {
        "message": f"Hello {name}, you are {age} years old!"
    }
    return jsonify(response)

if __name__ == '__main__':
    app.run(debug=True)

Giải thích code

  • from flask import Flask, request, jsonify: Import các module cần thiết từ Flask.
  • app = Flask(__name__): Tạo một ứng dụng Flask.
  • @app.route(‘/json’, methods=[‘POST’]): Định nghĩa route cho phương thức POST.
  • def json_example(): Hàm xử lý yêu cầu POST.
  • request_data = request.get_json(): Lấy dữ liệu JSON từ yêu cầu POST.
  • name = request_data.get(‘name’): Lấy giá trị ‘name’ từ dữ liệu JSON.
  • age = request_data.get(‘age’): Lấy giá trị ‘age’ từ dữ liệu JSON.
  • response = {“message”: f”Hello {name}, you are {age} years old!”}: Tạo đối tượng JSON để trả về.
  • return jsonify(response): Trả về đối tượng JSON.

Django

Nên sử dụng Django khi:

  • Dự án lớn và phức tạp: Django thích hợp cho các dự án lớn hơn, yêu cầu nhiều tính năng và cần một cấu trúc mạnh mẽ. Ví dụ, các ứng dụng thương mại điện tử, mạng xã hội, hoặc hệ thống quản lý nội dung.
  • Tích hợp sẵn nhiều tính năng: Django đi kèm với nhiều tính năng tích hợp như ORM (Object-Relational Mapping), hệ thống quản lý người dùng, và các công cụ bảo mật. Điều này giúp bạn tiết kiệm thời gian phát triển và đảm bảo các tiêu chuẩn bảo mật.
  • Quản lý và bảo trì dễ dàng: Với Django, bạn có một cấu trúc dự án rõ ràng và quản lý dễ dàng hơn, đặc biệt là khi làm việc trong các nhóm phát triển lớn.

Django cũng hỗ trợ mạnh mẽ việc xử lý JSON với REST framework, giúp bạn xây dựng các ứng dụng web phức tạp hơn:

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

@csrf_exempt
def json_example(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        name = data.get('name')
        age = data.get('age')
        
        response = {
            "message": f"Hello {name}, you are {age} years old!"
        }
        return JsonResponse(response)

Giải thích code

  • from django.http import JsonResponse: Import JsonResponse từ Django để trả về dữ liệu JSON.
  • from django.views.decorators.csrf import csrf_exempt: Import csrf_exempt để bỏ qua kiểm tra CSRF.
  • import json: Thư viện json để xử lý dữ liệu JSON.
  • @csrf_exempt: Đặt decorator để bỏ qua kiểm tra CSRF.
  • def json_example(request): Định nghĩa hàm xử lý yêu cầu.
  • if request.method == ‘POST’: data = json.loads(request.body): Kiểm tra nếu phương thức là POST và đọc dữ liệu JSON từ yêu cầu.
  • name = data.get(‘name’): Lấy giá trị ‘name’ từ dữ liệu JSON.
  • age = data.get(‘age’): Lấy giá trị ‘age’ từ dữ liệu JSON.
  • response = {“message”: f”Hello {name}, you are {age} years old!”}: Tạo đối tượng JSON để trả về.
  • return JsonResponse(response): Trả về đối tượng JSON.

Câu hỏi thường gặp về JSON Python

Khi nào nên sử dụng JSON thay vì XML?

JSON nên được sử dụng thay vì XML khi bạn cần một định dạng dữ liệu dễ đọc và viết, nhẹ và có thể tích hợp tốt với các ngôn ngữ lập trình hiện đại. JSON cũng thích hợp cho việc truyền dữ liệu qua mạng vì kích thước nhỏ hơn so với XML.

Tuy nhiên, nếu bạn cần cấu trúc dữ liệu phức tạp với các đặc điểm như thuộc tính và không gian tên, XML có thể là lựa chọn tốt hơn.

Tại sao Python là ngôn ngữ lý tưởng để làm việc với JSON?

Python là ngôn ngữ lý tưởng để làm việc với JSON vì:

  • Thư viện tích hợp: Python có thư viện json tích hợp sẵn giúp đọc, ghi và xử lý JSON dễ dàng.
  • Cú pháp đơn giản: Python có cú pháp đơn giản và dễ học, giúp lập trình viên nhanh chóng làm quen và xử lý dữ liệu JSON.
  • Hỗ trợ mạnh mẽ từ cộng đồng: Python có một cộng đồng lập trình viên lớn và nhiều tài liệu hướng dẫn, hỗ trợ việc xử lý JSON một cách hiệu quả.

Tổng kết JSON Python phần 2

Đây là phần cuối của chuỗi bài viết về JSON và Python, những ứng dụng được đề cập trong bài viêt này không chỉ giúp bạn thấy rõ vai trò của JSON trong việc phát triển phần mềm mà còn cung cấp các kỹ năng cần thiết để xử lý và quản lý dữ liệu một cách hiệu quả. Hy vọng qua chuỗi bài viết về JSON Python, bạn đã thu thập được nhiều kiến thức và kỹ năng hữu ích để áp dụng vào các dự án của mình.