Python có hỗ trợ tích hợp cho các tài liệu JSON, bằng mô-đun “json” của nó. Tôi cá là hầu hết chúng ta đã sử dụng nó, và một số người trong chúng ta đã sử dụng nó rất nhiều. Chúng tôi biết rằng chúng tôi có thể sử dụng phương thức
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
1 để dễ dàng chuyển đổi đối tượng từ điển Python thành chuỗi JSON. Tuy nhiên, phương pháp này không đơn giản như hầu hết các nhà phát triển nghĩTrong bài viết này, tôi sẽ giới thiệu phương pháp
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
1 này bằng các ví dụ. Mức độ phức tạp và hiếm của cách sử dụng là từ nông đến sâuBây giờ chúng ta nên bắt đầu. Không cần tải xuống bất cứ thứ gì, Python 3 của bạn. x phải đi kèm với mô-đun JSON
import json
Mục lục
1. Tự động thụt lề cho đầu ra đẹp
2. Dấu tách tùy chỉnh
3. Khóa sắp xếp
4. Bỏ qua các loại khóa không cơ bản
5. Ký tự không phải ASCII
6. Kiểm tra vòng tròn
7. Cho phép NaN [Không phải số]
8. Bộ mã hóa JSON tùy chỉnh
Trong trường hợp một số người mới đang đọc bài viết này, có lẽ cần đề cập rằng có hai phương thức tương tự trong mô-đun JSON -
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
3 và with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4Hai phương thức này có chữ ký gần như giống hệt nhau, nhưng
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
3 ghi chuỗi JSON đã chuyển đổi thành luồng [thường là tệp], trong khi with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4 chỉ chuyển đổi từ điển thành chuỗi JSONGiả sử chúng ta có một từ điển đơn giản như sau
my_dict = {
'name': 'Chris',
'age': 33
}
Nếu chúng tôi muốn chuyển đổi nó thành một chuỗi JSON được định dạng và ghi nó vào một tệp, chúng tôi có thể sử dụng
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4with open['my.json', 'w'] as f:
json.dump[my_dict, f]
Sau đó, nếu chúng tôi kiểm tra thư mục làm việc, tệp
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
8 sẽ ở đó cùng với chuỗi JSON đã chuyển đổiNếu chúng ta sử dụng
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4, nó chỉ đơn giản là chuyển từ điển thành một chuỗiwith open['my.json', 'w'] as f:
json.dump[my_dict, f]
2Vì hai phương thức này có cùng dấu hiệu nên bài viết này sẽ chỉ tập trung vào
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4, vì tất cả các thủ thuật này sẽ hiệu quả với phương thức còn lại1. Tự động thụt đầu dòng cho đầu ra đẹpXem đầu ra chuỗi đó bằng phương thức
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4? . Nếu chúng ta có một tài liệu JSON thực sự lớn, mọi thứ sẽ được xuất ra trên một dòng duy nhấtĐể xuất ra chuỗi JSON với định dạng đẹp, chúng ta có thể dễ dàng thêm tham số “thụt lề”. Nó lấy một số nguyên làm đối số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
52. Dấu phân cách tùy chỉnh
JSON tuân theo một định dạng khá nghiêm ngặt, ví dụ: các mục ở cùng cấp phải được phân tách bằng dấu phẩy và dấu chấm phẩy phải được sử dụng giữa khóa và giá trị của nó. Do đó, theo mặc định, dấu tách mục và dấu tách khóa sẽ là
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
22 và with open['my.json', 'w'] as f:
json.dump[my_dict, f]
23Tuy nhiên, nếu chúng ta muốn xuất ra một chuỗi JSON nhỏ gọn, chúng ta có thể thay đổi các dấu phân cách này bằng tham số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
24. Chúng ta phải chuyển cả hai dấu phân cách trong một tuplewith open['my.json', 'w'] as f:
json.dump[my_dict, f]
9Nếu chúng tôi không phải sử dụng chuỗi JSON dưới dạng JSON, chúng tôi cũng có thể sửa đổi các dấu phân cách thành bất kỳ thứ gì chúng tôi muốn. Ví dụ ta có thể để nó thành kiểu PHP như sau
import json
03. Sắp xếp phím
JSON thường không quan tâm đến thứ tự của các mục. Do đó, khi chúng tôi kết xuất một từ điển Python thành một chuỗi JSON, thứ tự của các mục sẽ được giữ nguyên
import json
1Tuy nhiên, nếu chúng tôi muốn sắp xếp chuỗi JSON đã chuyển đổi theo các khóa mục, chúng tôi có thể dễ dàng đặt tham số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
25 thành with open['my.json', 'w'] as f:
json.dump[my_dict, f]
26import json
4Chìa khóa sẽ được sắp xếp theo thứ tự bảng chữ cái
4. Bỏ qua các loại khóa không cơ bảnJSON chỉ hỗ trợ một số loại đối tượng dưới dạng khóa mục, đó là
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
27, with open['my.json', 'w'] as f:
json.dump[my_dict, f]
28, with open['my.json', 'w'] as f:
json.dump[my_dict, f]
29, with open['my.json', 'w'] as f:
json.dump[my_dict, f]
50 và with open['my.json', 'w'] as f:
json.dump[my_dict, f]
51. Các loại này được gọi là các loại cơ bản. Nếu chúng tôi cố gắng chuyển đổi một từ điển bằng loại khóa không cơ bản, một with open['my.json', 'w'] as f:
json.dump[my_dict, f]
52 sẽ bị némwith open['my.json', 'w'] as f:
json.dump[my_dict, f]
1Điều đó hợp lý vì JSON không hỗ trợ loại bộ sưu tập dưới dạng khóa. Tuy nhiên, nếu chúng tôi muốn bỏ qua những loại không có ý nghĩa này, chúng tôi có thể đặt
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
53 thành true để loại bỏ các mục nàymy_dict = {
'name': 'Chris',
'age': 33
}
05. Ký tự không phải ASCII
Các ký tự không phải ASCII không thể được đảm bảo hiển thị tốt trên tất cả các nền tảng và cũng có thể gây rắc rối trong quá trình truyền chuỗi JSON. Do đó, khi chuyển chúng thành một chuỗi JSON, Python sẽ mã hóa nó như sau
my_dict = {
'name': 'Chris',
'age': 33
}
1Tuy nhiên, nếu chúng ta không muốn mã hóa các ký tự đặc biệt này, chúng ta có thể đặt
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
54 thành falsemy_dict = {
'name': 'Chris',
'age': 33
}
26. kiểm tra thông tư
Trong Python, có thể định nghĩa một từ điển với tham chiếu vòng tròn. Ví dụ: hãy xác định một từ điển có khóa được gọi là “dictionary” và giá trị hiện tại là
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
51my_dict = {
'name': 'Chris',
'age': 33
}
3Sau đó, hãy gán chính từ điển đó làm giá trị của khóa “dictionary”
my_dict = {
'name': 'Chris',
'age': 33
}
4Bây giờ, nếu chúng ta thử xuất từ điển này, Python sẽ hiển thị
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
56 vì có một tham chiếu vòngNếu chúng tôi cố gắng kết xuất chuỗi JSON từ một từ điển như vậy, thì tham chiếu vòng tròn sẽ được phát hiện và gây ra lỗi
Tuy nhiên, nếu chúng tôi không muốn phát hiện tham chiếu vòng tròn và chỉ để nó đi, chúng tôi có thể đặt tham số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
57 thành falsemy_dict = {
'name': 'Chris',
'age': 33
}
5Sự khác biệt duy nhất là cái sau sẽ thực sự cố gắng kết xuất cấp độ từ điển được tham chiếu vòng tròn theo cấp độ cho đến khi nó bị tràn. Có lẽ không có lợi ích để làm như vậy. Ngay cả khi bạn muốn sử dụng tính năng này để đạt được điều gì đó khác [mà tôi không thể tìm thấy ví dụ nào…], thì phải có cách tốt hơn cách này
7. Cho phép NaN [Không phải là số]Mặc định khi convert từ điển có số không hợp lệ như
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
58, with open['my.json', 'w'] as f:
json.dump[my_dict, f]
59, with open['my.json', 'w'] as f:
json.dump[my_dict, f]
90 thì nó sẽ để nguyênmy_dict = {
'name': 'Chris',
'age': 33
}
6Điều này sẽ gây ra một số vấn đề sau này nếu chúng ta cố gắng sử dụng “chuỗi JSON” cho các mục đích khác vì nó không còn là một chuỗi JSON hợp lệ nữa.
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
91 không phải là loại giá trị JSON hợp lệNếu chúng tôi muốn tránh điều này hoặc ít nhất là để vấn đề bộc lộ sớm hơn, chúng tôi có thể đặt tham số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
92 thành false. Khi có NaN, một lỗi sẽ được đưa ramy_dict = {
'name': 'Chris',
'age': 33
}
78. Bộ mã hóa JSON tùy chỉnh
Cuối cùng nhưng không kém phần quan trọng, chúng ta hãy xem cách tùy chỉnh bộ mã hóa JSON. Thay vì để mọi thứ ở chế độ mặc định, chúng ta có thể điều chỉnh hành vi của phương thức JSON
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
4 một cách dễ dàngVí dụ, chúng ta có một từ điển như sau. Nó có một đối tượng datetime làm giá trị trong một mục
my_dict = {
'name': 'Chris',
'age': 33
}
8Trong trường hợp này, nếu chúng ta cố gắng kết xuất từ điển thành JSON, Lỗi Loại sẽ xuất hiện
Điều gì sẽ xảy ra nếu chúng ta muốn phân tích các đối tượng datetime khi kết xuất từ điển?
my_dict = {
'name': 'Chris',
'age': 33
}
9Trong đoạn mã trên, chúng tôi kiểm tra xem đối tượng có phải là đối tượng ngày giờ không. Nếu vậy, chúng tôi chuyển đổi ngày giờ thành một chuỗi và sau đó trả về nó. Nếu không, chỉ cần sử dụng phương pháp
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
96Khi chúng tôi có lớp bộ mã hóa tùy chỉnh này, chúng tôi có thể chuyển nó tới tham số
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
97 trong phương thức with open['my.json', 'w'] as f:
json.dump[my_dict, f]
98. hành vi của nó sẽ được thay đổiwith open['my.json', 'w'] as f:
json.dump[my_dict, f]
0Tóm lược
Hình ảnh được cung cấp bởi Alexandr Podvalny từ Pixabay
Trong bài viết này, tôi chỉ giới thiệu một phương thức —
with open['my.json', 'w'] as f:
json.dump[my_dict, f]
1 trong Python. Đối với một phương thức tích hợp sẵn như phương thức này, chúng ta thường sử dụng chúng rất nhiều, nhưng có thể chúng ta không biết hết từng khía cạnh của nó. Rất nên nghiên cứu các phương pháp mà chúng ta quen thuộc hơn là tiếp tục tìm kiếm những phương pháp hiếm khi được sử dụng, bởi vì phương pháp cũ có thể sẽ mang lại cho chúng ta nhiều giá trị hơn so với thời gian chúng ta đã bỏ raTham gia Medium với liên kết giới thiệu của tôi - Christopher Tao
Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…
Trung bình. com
Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. [Nhấp vào liên kết ở trên]