Mô-đun json của Python cho phép sử dụng dữ liệu ở định dạng JSON trong các ứng dụng của bạn. Bạn có muốn chuyển đổi một đối tượng Python thành JSON hoặc ngược lại không?
Mô-đun json của Python cung cấp các chức năng để chuyển đổi một đối tượng Python thành JSON [dump[] và dumps[]], quá trình chuyển đổi này được gọi là tuần tự hóa hoặc mã hóa. Mô-đun json cũng cung cấp các chức năng để chuyển đổi dữ liệu JSON thành đối tượng Python [load[] và loading[]], đây được gọi là giải tuần tự hóa hoặc giải mã
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sử dụng mô-đun json của Python để thực hiện tuần tự hóa và giải tuần tự hóa dữ liệu bằng định dạng JSON
Hãy bắt đầu bằng cách xem xét hai chức năng được cung cấp bởi mô-đun json. bãi [] và tải []
Mục lục
- Kết xuất JSON trong Python là gì?
- Tải JSON trong Python là gì?
- Làm thế nào để bạn đọc một tệp JSON bằng Python?
- Làm thế nào để bạn viết một tệp JSON bằng Python?
- Bảng chuyển đổi JSON trong Python
- Chuyển đổi các giá trị Boolean, Numeric và Null từ JSON sang Python
- Cách in dữ liệu JSON đẹp
- Dấu phân cách cho các đối tượng JSON trong Python
- Sắp xếp các khóa của đối tượng JSON
- Sử dụng vòng lặp For để in các phần tử trong một mảng JSON
- Cách lấy JSON từ API bằng Python
- Phần kết luận
Kết xuất JSON trong Python là gì?
json. Hàm dumps[] chuyển đổi một đối tượng Python thành một chuỗi ở định dạng JSON
Quá trình chuyển đổi một đối tượng Python thành một chuỗi JSON được gọi là tuần tự hóa. Quá trình này còn được gọi là mã hóa
Ví dụ: hãy định nghĩa một từ điển Python
>>> user = {'name': 'John', 'email': 'test@email.com'}
>>> type[user]
Và xem đầu ra chúng ta nhận được khi chuyển nó vào json. hàm bãi []
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
Hàm kết xuất đã chuyển đổi [tuần tự hóa] từ điển thành chuỗi JSON
Chữ 's' trong tên của hàm kết xuất đề cập đến thực tế là hàm này hoạt động với các chuỗi [trái ngược với hàm kết xuất [] hoạt động trên các tệp]
Tải JSON trong Python là gì?
Quá trình chuyển đổi một chuỗi JSON thành một đối tượng Python được gọi là giải tuần tự hóa. Quá trình này còn được gọi là giải mã
json. hàm loading[] thực hiện giải tuần tự hóa chuỗi JSON thành đối tượng Python
Lấy chuỗi JSON mà chúng tôi đã tạo trong phần trước và chuyển đổi lại thành từ điển
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
Theo cách tương tự mà chúng ta đã thấy với json. hàm dumps[], hàm json. loading[] tên hàm kết thúc bằng chữ ‘s’
Đó là bởi vì nó áp dụng cho các chuỗi JSON chứ không phải các tệp JSON [vì bạn sẽ sử dụng hàm json. hàm tải []]
Làm thế nào để bạn đọc một tệp JSON bằng Python?
Mô-đun json của Python cung cấp hàm load[] để đọc nội dung của tệp JSON và chuyển đổi nó thành một đối tượng Python
Hành vi giống như hàm loading[] với điểm khác biệt duy nhất là hàm loading[] áp dụng cho chuỗi và load[] cho tệp
Đây là cách bạn có thể đọc dữ liệu JSON từ một tệp. Tôi đã tạo một tệp có tên bài viết. json với nội dung sau
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
Giả sử tôi muốn đọc tiêu đề của bài viết đầu tiên
Đầu tiên, hãy chuyển đổi JSON trong tệp thành đối tượng Python bằng load[]. Để mở tệp, chúng tôi sẽ sử dụng trình quản lý bối cảnh mở để tự động đóng tệp khi không cần nữa
>>> import json
>>> with open['posts.json'] as json_file:
.. data = json.load[json_file]
...
>>> print[data]
[{'userId': 1, 'postId': 1, 'title': 'How to Convert a JSON Object into a Python Object'}, {'userId': 1, 'postId': 2, 'title': 'How to Convert a Python Object into a JSON Object'}]
>>> print[type[data]]
Chúng tôi đã chuyển đổi [hoặc giải mã hoặc giải tuần tự hóa] dữ liệu của mình thành một danh sách
Hãy xác nhận rằng các phần tử của danh sách là từ điển
>>> print[type[data[0]]]
Điều đó tốt, điều này có nghĩa là để lấy tiêu đề của bài đăng đầu tiên, chúng ta chỉ cần truy cập khóa 'title' của từ điển data[0]
>>> print[data[0]['title']]
How to Convert a JSON Object into a Python Object
Làm thế nào để bạn viết một tệp JSON bằng Python?
Chúng ta đã biết cách đọc dữ liệu JSON từ một tệp và chuyển đổi nó thành một đối tượng Python
Làm thế nào bạn có thể làm điều ngược lại?
Mô-đun json của Python cung cấp hàm dump[] ghi một đối tượng Python vào một tệp ở định dạng JSON
Hãy bắt đầu từ đối tượng Python được tạo ở phần trước
>>> data = [{'userId': 1, 'postId': 1, 'title': 'How to Convert a JSON Object into a Python Object'}, {'userId': 1, 'postId': 2, 'title': 'How to Convert a Python Object into a JSON Object'}]
Thay vì chỉ ghi dữ liệu này vào tệp JSON, chúng tôi sẽ sửa đổi dữ liệu trước
Do đó, chúng tôi muốn có một đối tượng JSON trong đó cả hai mục đều chứa một thuộc tính trống mới có tên là “body”
Thêm khóa “body” vào cả hai từ điển trong danh sách Python của chúng tôi, sau đó ghi đối tượng vào tệp bằng hàm dump[]
________số 8Sử dụng với open và hàm dump[] chúng ta ghi vào bài viết. tập tin json. Lưu ý rằng hàm dump[] lấy đối tượng Python làm đối số đầu tiên và đối tượng tệp làm đối số thứ hai
Tuy nhiên, chúng tôi nhận được một ngoại lệ liên quan đến thực tế là đối tượng tệp không thể ghi được
Đó là bởi vì chúng ta phải mở tệp rõ ràng ở chế độ ghi
>>> with open['posts.json', 'w'] as json_file:
.. json.dump[data, json_file]
...
>>>
Tất cả đều tốt thời gian này
Hãy đọc nội dung của tệp JSON được cập nhật để xác nhận cả hai mục đều có thuộc tính “body”
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
0Có, tệp JSON đã được cập nhật như chúng tôi mong đợi
Bảng chuyển đổi JSON trong Python
Việc chuyển đổi đối tượng JSON thành đối tượng Python tuân theo các quy ước trong bảng bên dưới
JSONPythonobjectdictarrayliststringstrnumber [int]intnumber [real]floattrueTruefalseFalsenullNoneHãy chứng minh bằng một số ví dụ về ánh xạ được hiển thị trong bảng chuyển đổi JSON
Trước đây chúng ta đã thấy điều đó thường xuyên khi một chuỗi JSON được giải tuần tự hóa, kết quả là một từ điển
Ví dụ: hãy deserialize mảng JSON sau đây
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
1Để chuyển đổi mảng này thành một đối tượng Python, chúng ta có thể sử dụng hàm loading[]
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
2Bạn có thể thấy rằng sau khi giải mã một mảng JSON, chúng tôi đã lấy lại một danh sách Python
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
3Hãy xem điều gì sẽ xảy ra nếu một đối tượng JSON chứa một mảng là một trong các giá trị của nó
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
4Như được hiển thị trong bảng chuyển đổi, đối tượng JSON trở thành một từ điển
Đồng thời, giá trị bên trong đối tượng JSON của chúng tôi được ánh xạ tới khóa “các ngày trong tuần” là một mảng JSON và bây giờ là một danh sách Python
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
5Chuyển đổi các giá trị Boolean, Numeric và Null từ JSON sang Python
Hãy sử dụng một đối tượng khác để hiển thị chuyển đổi JSON sang Python cho các số, booleans và giá trị null
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
6Bạn có thể thấy rằng sau khi giải mã đối tượng JSON của chúng tôi, điều sau đây sẽ xảy ra
- sự thật trở thành sự thật
- sai trở thành Sai
- số int và số thực trở thành số int và số float trong Python
- null trở thành Không có
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
7Bây giờ, làm thế nào chúng ta có thể quay lại từ đối tượng Python sang chuỗi JSON?
Chúng ta có thể sử dụng json. chức năng bãi []…
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
8Và voilà, chúng tôi đã lấy lại đối tượng JSON ban đầu
Cách in dữ liệu JSON đẹp
Trong phần trước, chúng ta đã thấy một ví dụ về đối tượng JSON trong đó mọi giá trị được in trên một dòng
>>> import json
>>> user_json = json.dumps[user]
>>> print[user_json]
{"name": "John", "email": "test@email.com"}
>>> type[user_json]
9Điều này có thể hoạt động nếu đối tượng JSON không chứa quá nhiều thuộc tính và nếu giá trị của nó không quá dài
Tuy nhiên, hãy tưởng tượng nếu bạn có một đối tượng JSON với 50 thuộc tính và giá trị có thể là mảng có nhiều phần tử
Tại thời điểm đó, việc đọc đối tượng JSON khi được biểu diễn trong một dòng sẽ trở nên thực sự khó khăn
Để giải quyết vấn đề này, có một đối số thụt lề tùy chọn mà chúng ta có thể chuyển đến hàm dumps[] khi chúng ta mã hóa một đối tượng Python thành JSON
Hãy xem JSON được mã hóa thay đổi như thế nào nếu chúng ta chuyển ba giá trị khác nhau cho thụt lề. 0, 1 và 2
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
0>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
1>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
2Khi chúng ta chuyển đối số thụt lề cho json. chức năng dumps[] có hai điều xảy ra
- Đối tượng JSON được hiển thị trên nhiều dòng và do đó dễ đọc hơn
- Mỗi thuộc tính của đối tượng JSON được bắt đầu bởi một số khoảng trắng phụ thuộc vào giá trị của thụt lề
Dấu phân cách cho các đối tượng JSON trong Python
json. kết xuất và json. các hàm kết xuất cũng chấp nhận một đối số tùy chọn được gọi là dấu tách là một bộ có định dạng sau
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
3Như bạn có thể tưởng tượng, việc thay đổi các dấu tách mục và khóa sẽ thay đổi hoàn toàn giao diện của một đối tượng JSON
Giá trị dấu phân cách mặc định được sử dụng trong Python để mã hóa các đối tượng thành JSON là [‘, ‘, ‘. ‘]
Lưu ý cách cả mục mặc định và dấu tách khóa đều chứa khoảng trắng. Đây là JSON chúng tôi đã tạo cho đến nay bằng cách sử dụng dấu phân cách mặc định và thụt lề được đặt thành 2
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
2Bây giờ hãy chú ý đến sự khác biệt nếu chúng ta thay đổi giá trị của đối số dấu phân cách
Chúng tôi có thể xóa khoảng trắng để có được biểu diễn JSON nhỏ gọn hơn
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
5Sắp xếp các khóa của đối tượng JSON
Trong một số trường hợp, có thể sắp xếp các khóa trong một đối tượng JSON có thể hữu ích
Hãy tưởng tượng bạn có một đối tượng JSON có 100 khóa…
… sắp xếp chúng chắc chắn sẽ làm cho đối tượng dễ đọc hơn
Đây là cách chúng ta có thể sắp xếp các khóa của một đối tượng JSON
Chẳng hạn, hãy bắt đầu với đối tượng Python sau được chuyển đổi thành đối tượng JSON
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
6Bạn có thể thấy rằng các khóa của đối tượng JSON không được sắp xếp
Để sắp xếp các khóa của một đối tượng JSON khi mã hóa nó từ một đối tượng Python, bạn có thể sử dụng đối số sort_keys, một boolean có giá trị mặc định là Sai
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
7Do đó, lần này các thuộc tính JSON được sắp xếp theo thứ tự bảng chữ cái
Sử dụng vòng lặp For để in các phần tử trong một mảng JSON
Giả sử chúng ta có tệp JSON sau được gọi là người dùng. json chứa thông tin chi tiết về tất cả người dùng đã đăng ký dịch vụ của bạn
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
8Làm cách nào chúng ta có thể sử dụng vòng lặp Python for để đi qua mọi người dùng trong mảng JSON?
Trước hết chúng ta phải chuyển đổi nội dung của tệp JSON thành một đối tượng Python. Để làm điều đó, chúng tôi sẽ sử dụng json. hàm tải []
>>> user = json.loads[user_json]
>>> print[user]
{'name': 'John', 'email': 'test@email.com'}
>>> type[user]
9Sử dụng load[], chúng tôi đã tạo một đối tượng Python có tên là dữ liệu mà sau đó chúng tôi có thể sử dụng để đọc chi tiết về từng người dùng
Đối tượng Python là một từ điển, để đi qua từng người dùng, trước tiên chúng ta phải truy cập khóa 'người dùng'. Sau đó lặp qua nó bằng vòng lặp for
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
0Có ý nghĩa?
Cách lấy JSON từ API bằng Python
Nhưng, làm thế nào bạn sẽ sử dụng những gì chúng ta đã học được cho đến nay trong thực tế?
JSON là định dạng dữ liệu phổ biến nhất được sử dụng cho API hiện nay, điều này có nghĩa là biết cách đọc và viết nó cho phép bạn tích hợp nhiều hệ thống trao đổi dữ liệu ở định dạng JSON
Hãy cùng xem cách bạn sẽ đọc dữ liệu JSON do API công khai trả về
Trong ví dụ này, tôi sẽ sử dụng API sau để trả về các giống chó
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
1Ghi chú. API này có thể thay đổi trong tương lai nhưng các khái niệm cơ bản để truy xuất dữ liệu từ nó vẫn giữ nguyên
Nếu bạn mở URL này trong trình duyệt của mình, bạn sẽ thấy phản hồi API…
…nhưng làm cách nào chúng tôi có thể truy xuất phản hồi bằng Python?
Chúng ta có thể sử dụng urllib. mô-đun yêu cầu để thực hiện yêu cầu GET tới điểm cuối API
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
2Hãy in 200 ký tự đầu tiên của phản hồi bằng toán tử cắt
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
3Bây giờ, chúng ta có thể sử dụng kiến thức của mình trong việc thao tác dữ liệu JSON để chuyển đổi phản hồi đến từ API thành đối tượng Python bằng cách sử dụng json. tải []
[
{
"userId": 1,
"postId": 1,
"title": "How to Convert a JSON Object into a Python Object"
},
{
"userId": 1,
"postId": 2,
"title": "How to Convert a Python Object into a JSON Object"
}
]
4Do đó, chúng tôi đã lấy lại được một từ điển và giờ đây chúng tôi có thể truy cập bất kỳ dữ liệu nào chúng tôi cần
Phần kết luận
Bây giờ bạn đã có kiến thức để sử dụng mô-đun json để thực hiện
- tuần tự hóa [mã hóa]. chuyển đổi một đối tượng Python thành một đối tượng JSON
- khử lưu huỳnh [giải mã]. chuyển đổi một đối tượng JSON thành một đối tượng Python
Chúng tôi đã học được rằng để làm việc với các chuỗi JSON, bạn có thể sử dụng json. bãi [] và json. tải []. Để làm việc với các tệp JSON, bạn sẽ sử dụng json. bãi [] và json. trọng tải[]
Bạn cũng biết cách in đẹp một đối tượng JSON để cải thiện khả năng đọc của nó và cách đọc phản hồi JSON đến từ một API
JSON là một trong những định dạng để trao đổi dữ liệu giữa các hệ thống và nó không phụ thuộc vào ngôn ngữ lập trình mà các hệ thống được xây dựng
Python cũng cung cấp một cách khác để tuần tự hóa và giải tuần tự hóa dữ liệu của bạn, hãy xem mô-đun Pickle nếu bạn chưa có
Bài viết liên quan
Cách viết danh sách vào tệp bằng Python [Có ví dụ]
Giải thích về lỗi Python loại không thể xóa được. Cách khắc phục
Tham số chức năng mặc định trong Python. Làm thế nào bạn có thể sử dụng chúng?
Claudio Sabato
Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng