Cách phân tích cú pháp JSON trong Python

JSON là một định dạng trao đổi dữ liệu phổ biến. Python cung cấp một mô-đun JSON tích hợp để phân tích cú pháp và làm việc với dữ liệu JSON. Và hướng dẫn này sẽ dạy cho bạn tất cả về cách làm việc với JSON trong Python.

Đến cuối hướng dẫn này, bạn sẽ học được:

  • Khái niệm cơ bản về JSON,
  • cách phân tích cú pháp và tạo chuỗi JSON trong python và
  • cách đọc và ghi vào tệp JSON trong python.

Hãy bắt đầu nào!⏳

JSON là gì?

JSON là viết tắt của JavaScript Object Notation và là định dạng trao đổi dữ liệu dựa trên văn bản. Mặc dù JSON ban đầu được lấy cảm hứng từ các đối tượng JavaScript, nhưng hầu như tất cả các ngôn ngữ lập trình đều hỗ trợ làm việc với JSON.

Nếu bạn đã từng làm việc với API hoặc đọc các tệp cấu hình, có lẽ bạn đã bắt gặp JSON.

📑 Bạn gửi và nhận dữ liệu ở định dạng JSON khi truy vấn API. JSON cũng được sử dụng rộng rãi trong giao tiếp máy khách-máy chủ trong các ứng dụng. Ngoài ra, bạn cũng có thể sử dụng JSON để lưu trữ dữ liệu cho mục đích chung.

Định dạng JSON rất giống với từ điển Python. Từ điển là cấu trúc dữ liệu tích hợp mạnh mẽ trong Python lưu trữ dữ liệu theo cặp khóa-giá trị.

Trước khi chúng tôi tiến hành, đây là một số điểm cần lưu ý:

  • Trong Python, một đối tượng JSON được lưu trữ dưới dạng từ điển.
  • Một mảng trong JSON được lưu trữ dưới dạng danh sách python.
  • Trong JSON, các giá trị logic được đánh dấu là đúng và sai. Trong Python, chúng được chuyển thành giá trị boolean True và False.

Để biết thêm thông tin về các loại dữ liệu được dịch từ JSON sang Python, hãy đọc tài liệu tại đây.

Vì mô-đun json là một phần của thư viện chuẩn python nên bạn không cần cài đặt nó. Bạn có thể nhập vào thư mục hiện tại của mình như sau:

import json

Cách tải chuỗi JSON trong python

Cú pháp chung để tải một chuỗi JSON trong Python là:

<dict_obj> = json.loads(<json_str>)

Nơi đây,

  • là từ điển python mà bạn muốn tải chuỗi JSON vào,
  • là bất kỳ chuỗi JSON hợp lệ nào.

Điều này sẽ tải vào từ điển python.

Hãy mã một ví dụ. Ở đây json_str là một chuỗi JSON.

json_str=""'
{
    "books": [
        {
            "title": "The Wind in the Willows",
            "author": "Kenneth Grahame",
            "year": "1908"
        },
        {
            "title": "To the Lighthouse",
            "author": "Virginia Woolf",
            "year": "1927"
        }
    ]
}
'''

Và đoạn mã dưới đây cho thấy cách tải chuỗi JSON json_str vào từ điển python bằng phương thức load(). Bạn có thể sử dụng hàm type() tích hợp để kiểm tra xem py_dict có phải là từ điển python hay không.

py_dict = json.loads(json_str)

type(py_dict)

# Output: dict

print(py_dict)

# Output
{'books': [{'title': 'The Wind in the Willows', 
'author': 'Kenneth Grahame', 'year': '1908'}, 
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Như được hiển thị trong đoạn mã trên, tất cả các trường trong chuỗi JSON là các cặp khóa-giá trị trong py_dict.

Cách tạo chuỗi JSON trong python

Giả sử bạn có một từ điển python. Vậy làm cách nào để tạo một chuỗi JSON từ nó?

Bạn có thể làm điều này với phương thức dumps() theo cú pháp sau:

<json_str> = json.dumps(<dict_obj>)

Nơi đây,

  • là từ điển python mà bạn muốn tạo chuỗi JSON,
  • là chuỗi JSON kết quả.

Vì vậy, phương thức dumps() kết xuất thành một chuỗi JSON.

Đến từ điển python py_dict hiện có của chúng tôi. hãy thêm một khóa mới “phim”. Bạn có thể làm điều này như thể hiện trong đoạn mã dưới đây:

py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]

Bây giờ, hãy kết xuất từ ​​điển đã sửa đổi thành một chuỗi JSON mới json_str2 bằng cách sử dụng phương thức dumps().

json_str2 = json.dumps(py_dict)

print(json_str2)

# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, 
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], 
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

Như bạn có thể thấy trong ví dụ trên, chuỗi JSON đầu ra khó đọc nếu không có định dạng phù hợp. Bạn có thể sử dụng tham số thụt lề tùy chọn để thêm thụt lề.

Bạn có thể làm điều này bằng cách đặt thụt lề thành một số nguyên như 2như hình dưới đây:

json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)

# Output
{
  "books": [
    {
      "title": "The Wind in the Willows",
      "author": "Kenneth Grahame",
      "year": "1908"
    },
    {
      "title": "To the Lighthouse",
      "author": "Virginia Woolf",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "title": "The Imitation Game",
      "year": "2014",
      "lang": "en",
      "watched": true
    }
  ]
}

Quan sát cách đầu ra đã được định dạng với thụt đầu dòng và dễ dàng theo dõi.

Lưu ý: 💡 Nếu bạn muốn các khóa được sắp xếp theo thứ tự bảng chữ cái, bạn có thể đặt tham số sort_keys thành True.

Như bạn có thể thấy trong đoạn mã bên dưới, các phím đã được sắp xếp theo thứ tự bảng chữ cái.

json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)

# Output
{
  "books": [
    {
      "author": "Kenneth Grahame",
      "title": "The Wind in the Willows",
      "year": "1908"
    },
    {
      "author": "Virginia Woolf",
      "title": "To the Lighthouse",
      "year": "1927"
    }
  ],
  "movies": [
    {
      "lang": "en",
      "title": "The Imitation Game",
      "watched": true,
      "year": "2014"
    }
  ]

Và các phím hiện xuất hiện theo thứ tự bảng chữ cái: “tác giả”, “tiêu đề” và “năm”.

Cho đến giờ, bạn đã học cách làm việc với các chuỗi JSON trong Python. Trong phần tiếp theo, bạn sẽ học cách làm việc với tệp JSON.

Làm cách nào để đọc tệp JSON bằng Python?

Để đọc tệp JSON trong python, hãy sử dụng cú pháp sau:

json.load(<json-file>) 

# where <json-file> is any valid JSON file.

Lưu ý cách chúng ta sử dụng phương thức load(), không phải phương thức load(). load() tải một chuỗi JSON trong khi load() tải một tệp JSON.

Bạn nên cân nhắc sử dụng trình quản lý ngữ cảnh khi làm việc với tệp trong Python. Bạn cũng có thể thử đọc các tệp như sau mà không cần sử dụng trình quản lý ngữ cảnh:

my_file = open('students.json','r')

contents = my_file.read()

print(contents)

file.close()

Nếu bạn không đóng tệp, tài nguyên có thể bị lãng phí.

Tuy nhiên, khi làm việc với trình quản lý bối cảnh, các tệp sẽ tự động được đóng lại khi hoàn thành các thao tác với tệp.

Và bạn có thể sử dụng trình quản lý ngữ cảnh để đọc các tệp như hình bên dưới:

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

# Output 

{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, 
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Khi đọc từ một tệp, hãy chỉ định chế độ là đã đọc – được biểu thị bằng ‘r’ trong mã ở trên.

Lưu ý: Để dễ dàng điều hướng thư mục hiện tại, hãy đảm bảo rằng tệp JSON nằm trong cùng thư mục với main.py như trong hình bên dưới. Nếu tệp JSON nằm trong một thư mục khác, hãy nhớ chỉ định đường dẫn đến tệp.

Đọc tệp JSON trong python.

Trong phần tiếp theo, bạn sẽ tìm hiểu cách ghi vào tệp JSON.✍

Làm cách nào để ghi vào tệp JSON trong python?

Để lưu vào tệp JSON hiện có hoặc tạo tệp JSON mới, hãy sử dụng phương thức dump() như được hiển thị:

json.dump(<dict_obj>,<json_file>)

# where <dict_obj> is a Python dictionary 

# and <json_file> is the JSON file 

Vì vậy, cú pháp trên kết xuất từ ​​điển vào một tệp JSON.

Trong phần trước, chúng ta đã có một từ điển py_dict. Bây giờ, hãy kết xuất tệp này vào một tệp JSON mới. Và hãy gọi nó là new_file.json.

Ô mã sau đây cho biết cách sử dụng kết xuất():

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

Lưu ý: Mở tệp ở chế độ ghi (w) sẽ ghi đè lên nội dung nếu tệp tồn tại. Nếu tệp không tồn tại, tệp sẽ được tạo.

Sau khi thực thi ô mã ở trên, bạn sẽ thấy rằng một tệp JSON mới đã được tạo trong thư mục làm việc hiện tại của bạn. Và bạn có thể tiếp tục và kiểm tra nội dung của tệp JSON.

Tạo một tệp JSON trong python

Khi ghi vào tệp, mục tiêu chính là lưu trữ dữ liệu. Và nếu bạn muốn giữ nguyên định dạng, bạn cũng có thể sử dụng các tham số thụt lề và sort_keys.

Đăng kí

⏲ ​​Thời gian tóm tắt nhanh.

Trong hướng dẫn này, bạn đã học được:

  • kiến thức cơ bản về sử dụng JSON,
  • cách sử dụng các phương thức load() và load() để đọc các chuỗi JSON và tệp JSON tương ứng,
  • cách sử dụng các phương thức dumps() và dump() để kết xuất từ ​​điển Python thành chuỗi JSON và tệp JSON tương ứng.

Tôi hy vọng bạn tìm thấy hướng dẫn này hữu ích. Chúc bạn học tập vui vẻ!

Bạn cũng có thể xem các công cụ JSON để phân tích cú pháp, định dạng và xác thực.

Những bài viết liên quan

Back to top button