Hướng dẫn phân tích cú pháp JSON trong Python

Bình luận: 0

JSON là viết tắt của ký hiệu đối tượng JavaScript. Nó không chỉ nhẹ mà còn dễ đọc và viết cho con người. Tương tự, máy móc thấy dễ phân tích và tạo ra. Phân tích cú pháp JSON là vô cùng quan trọng khi làm việc với dữ liệu từ API, các tệp cấu hình hoặc các nguồn thông tin được lưu trữ khác cho bất kỳ nhà phát triển Python nào. Bài viết này đưa bạn qua các quy trình cơ bản để phân tích cú pháp JSON bằng mô -đun Python từ JSON.

Hiểu JSON và cấu trúc của nó

JSON đại diện cho dữ liệu dưới dạng các cặp giá trị khóa, tương tự như từ điển Python. Đây là một ví dụ cơ bản về đối tượng JSON:

{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

Đối tượng JSON này bao gồm một chuỗi, một số, boolean và một mảng. Hiểu cấu trúc này là cơ bản để phân tích và điều khiển dữ liệu JSON trong Python.

Làm việc với JSON trong Python

Mô -đun JSON của Python làm cho nó đơn giản để phân tích các chuỗi và tệp JSON. Mô -đun này bao gồm các phương thức như json.loads () để đọc json từ chuỗi và json.load () để đọc json từ một tệp. Ngược lại, json.dumps () và json.dump () được sử dụng để viết json vào một chuỗi và một tệp, tương ứng.

Đọc dữ liệu JSON

Có một số cách để đọc dữ liệu JSON, mà chúng ta sẽ xem xét tiếp theo.

Đọc JSON từ chuỗi

Để đọc dữ liệu JSON từ một chuỗi, hãy sử dụng phương thức json.Loads ():

import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

Đầu ra:

1.png

Đọc JSON từ một tệp

Để đọc dữ liệu JSON từ một tệp, hãy sử dụng phương thức JSON.LOAD ():

import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Đầu ra:

2.png

Viết dữ liệu JSON

Dưới đây là một số cách khác nhau để viết dữ liệu JSON:

Viết JSON vào chuỗi

Để ghi dữ liệu JSON vào một chuỗi, hãy sử dụng phương thức json.dumps ():

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

json_string = json.dumps(data)
print(json_string)

Đầu ra:

3.png

Viết JSON vào một tệp

Để ghi dữ liệu JSON vào một tệp, hãy sử dụng phương thức json.dump ():

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

with open('data.json', 'w') as file:
    json.dump(data, file)

Xử lý JSON lồng nhau

Các đối tượng JSON lồng nhau là phổ biến khi làm việc với các cấu trúc dữ liệu phức tạp hơn. Python có thể dễ dàng xử lý các cấu trúc lồng nhau này.

import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

Đầu ra:

4.png

Bộ mã hóa JSON tùy chỉnh

Đôi khi, bạn cần chuyển đổi các đối tượng Python tùy chỉnh thành JSON. Điều này đòi hỏi một bộ mã hóa tùy chỉnh.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

Đầu ra:

5.png

Bộ giải mã JSON tùy chỉnh

Tương tự, để giải mã dữ liệu JSON thành các đối tượng Python tùy chỉnh, bạn cần một trình giải mã tùy chỉnh.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

Đầu ra:

6.png

Xử lý các vấn đề chung

Làm việc với dữ liệu JSON có thể dẫn đến một số lỗi phổ biến, đặc biệt là khi phân tích cú pháp, tạo hoặc truy cập dữ liệu JSON. Dưới đây là một số trong những cái phổ biến nhất:

Định dạng JSON không hợp lệ

Một lỗi phổ biến khi phân tích cú pháp JSON đang gặp phải định dạng JSON không hợp lệ. JSON yêu cầu trích dẫn gấp đôi xung quanh các khóa và giá trị chuỗi, và làm tổ đúng giá đỡ và niềng răng.

import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

Đầu ra:

7.png

Xử lý các phím bị thiếu

Khi phân tích dữ liệu JSON, bạn có thể gặp các khóa bị thiếu. Sử dụng phương thức GET để cung cấp giá trị mặc định nếu thiếu khóa.

import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

Gỡ lỗi các vấn đề phân tích cú pháp JSON

Sử dụng mô -đun PDB để đặt các điểm dừng và gỡ lỗi mã phân tích cú pháp JSON của bạn.

import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

Ví dụ thực tế về xử lý JSON trong việc cạo web

Xóa web thường liên quan đến việc trích xuất dữ liệu từ các API Web trả về các phản hồi JSON. Dưới đây là một ví dụ nhỏ gọn sử dụng thư viện yêu cầu và https://httpbin.org/anything endpoint.

Đầu tiên, đảm bảo bạn đã cài đặt thư viện yêu cầu:

pip install requests

Mã này nhập các yêu cầu cho các yêu cầu HTTP và JSON để xử lý dữ liệu JSON. Nó gửi yêu cầu GET đến URL mục tiêu bằng cách sử dụng các yêu cầu.Get (URL) và phân tích phản hồi JSON với phản hồi.json (), biến nó thành từ điển Python. Chúng tôi rút ra và in dữ liệu cụ thể như tiêu đề, tác nhân người dùng, nguồn gốc và URL.

Mã chứa xử lý lỗi mạnh; Nó nắm bắt được json.jsondecodeError khi xảy ra lỗi giải mã JSON và KeyError khi không có khóa cụ thể, do đó làm cho chương trình được bảo vệ khỏi ‘không có sự cố dữ liệu. Do đó, sự mạnh mẽ của mã như vậy cho phép nó xử lý các tác vụ quét web thực sự một cách hoàn hảo.

import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # Trích xuất dữ liệu cụ thể từ phản hồi JSON
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

Mỗi lập trình viên Python phải biết cách phân tích cú pháp JSON. Với mô -đun JSON và cách tốt nhất để thực hiện nó được làm nổi bật bởi hướng dẫn này, bạn sẽ có thể đọc, viết và gỡ lỗi dữ liệu JSON đủ nhanh. Điều đó ngụ ý bạn sẽ thường xuyên kiểm tra mã của mình và sử dụng các công cụ chính xác và hầu hết các tính năng hiện tại có sẵn trong Python cho các kỹ năng xử lý JSON tốt hơn.

Khi thực hiện quét web, người ta thấy phân tích cú pháp JSON là quan trọng, xem xét thực tế là dữ liệu được lấy từ API Web thường xuất hiện dưới dạng JSON bên cạnh, bạn có thể trích xuất thông tin từ các nguồn web khác nhau một cách hiệu quả, nếu bạn có thể phân tích và thao tác dữ liệu JSON JSON một cách tốt.

Bình luận:

0 Bình luận