Đọc danh sách các đối tượng JSON Python

Kể từ khi thành lập, JSON đã nhanh chóng trở thành tiêu chuẩn thực tế để trao đổi thông tin. Rất có thể bạn ở đây vì bạn cần vận chuyển một số dữ liệu từ đây đến đó. Có lẽ bạn đang thu thập thông tin thông qua API hoặc lưu trữ dữ liệu của mình trong cơ sở dữ liệu tài liệu. Bằng cách này hay cách khác, bạn đã hiểu hết về JSON và bạn đã tìm đến Python theo cách của mình

May mắn thay, đây là một nhiệm vụ khá phổ biến và—cũng như hầu hết các nhiệm vụ phổ biến khác—Python khiến nó trở nên dễ dàng một cách kinh khủng. Đừng sợ, các bạn Pythoneer và Pythonistas. Đây sẽ là một làn gió

Vì vậy, chúng tôi sử dụng JSON để lưu trữ và trao đổi dữ liệu? . Đó không gì khác hơn là một định dạng được tiêu chuẩn hóa mà cộng đồng sử dụng để truyền dữ liệu đi khắp nơi. Hãy nhớ rằng, JSON không phải là định dạng duy nhất có sẵn cho loại công việc này, nhưng XML và YAML có lẽ là những định dạng duy nhất khác đáng được nhắc đến trong cùng một hơi thở

Tải xuống PDF miễn phí. Bảng cheat Python 3

Lịch sử tóm tắt (rất) của JSON

Không quá ngạc nhiên, Ký hiệu đối tượng JavaScript được lấy cảm hứng từ một tập hợp con của ngôn ngữ lập trình JavaScript xử lý cú pháp nghĩa đen của đối tượng. Họ có một trang web tiện lợi giải thích toàn bộ sự việc. Đừng lo lắng mặc dù. JSON từ lâu đã trở thành ngôn ngữ bất khả tri và tồn tại như một tiêu chuẩn riêng của nó, vì vậy chúng ta rất may có thể tránh JavaScript vì lợi ích của cuộc thảo luận này

Cuối cùng, cộng đồng nói chung đã chấp nhận JSON vì cả con người và máy móc đều dễ dàng tạo và hiểu

Loại bỏ các quảng cáo

Hãy nhìn xem, đó là JSON

Chuẩn bị. Tôi sắp cho bạn xem một số JSON ngoài đời thực—giống như bạn thấy ở ngoài kia. Không sao đâu. JSON được cho là có thể đọc được bởi bất kỳ ai đã sử dụng ngôn ngữ kiểu C và Python là ngôn ngữ kiểu C… vậy đó là bạn

{
    "firstName": "Jane",
    "lastName": "Doe",
    "hobbies": ["running", "sky diving", "singing"],
    "age": 35,
    "children": [
        {
            "firstName": "Alice",
            "age": 6
        },
        {
            "firstName": "Bob",
            "age": 8
        }
    ]
}

Như bạn có thể thấy, JSON hỗ trợ các kiểu nguyên thủy, như chuỗi và số, cũng như danh sách và đối tượng lồng nhau

Đợi đã, trông giống như một từ điển Python. Tôi biết, phải không? . Hãy thảo luận về các lựa chọn thay thế trong các ý kiến

chà. Bạn đã sống sót sau cuộc chạm trán đầu tiên với một số JSON hoang dã. Bây giờ bạn chỉ cần học cách chế ngự nó

Python hỗ trợ JSON nguyên bản

Python đi kèm với gói tích hợp có tên

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 để mã hóa và giải mã dữ liệu JSON

Chỉ cần ném anh chàng nhỏ bé này lên đầu hồ sơ của bạn

import json

Một chút từ vựng

Quá trình mã hóa JSON thường được gọi là tuần tự hóa. Thuật ngữ này đề cập đến việc chuyển đổi dữ liệu thành một chuỗi byte (do đó là nối tiếp) để được lưu trữ hoặc truyền qua mạng. Bạn cũng có thể nghe thấy thuật ngữ soái ca, nhưng đó là một cuộc thảo luận hoàn toàn khác. Đương nhiên, giải tuần tự hóa là quá trình giải mã dữ liệu đối ứng đã được lưu trữ hoặc phân phối theo tiêu chuẩn JSON

Rất tiếc. Nghe có vẻ khá kỹ thuật. Chắc chắn. Nhưng trên thực tế, tất cả những gì chúng ta đang nói ở đây là đọc và viết. Hãy nghĩ về nó như thế này. mã hóa là để ghi dữ liệu vào đĩa, trong khi giải mã là để đọc dữ liệu vào bộ nhớ

Tuần tự hóa JSON

Điều gì xảy ra sau khi máy tính xử lý nhiều thông tin? . Theo đó, thư viện

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 đưa ra phương thức
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3 để ghi dữ liệu vào tệp. Ngoài ra còn có một phương thức
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
4 (phát âm là “dump-s”) để ghi vào một chuỗi Python

Các đối tượng Python đơn giản được dịch sang JSON theo cách chuyển đổi khá trực quan

PythonJSON

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
5
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
6
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
7,
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
8
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
9
json_string = json.dumps(data)
0
json_string = json.dumps(data)
1
json_string = json.dumps(data)
2,
json_string = json.dumps(data)
3,
json_string = json.dumps(data)
4
json_string = json.dumps(data)
5
json_string = json.dumps(data)
6
json_string = json.dumps(data)
7
json_string = json.dumps(data)
8
json_string = json.dumps(data)
9
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
0
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
1

Một ví dụ tuần tự hóa đơn giản

Hãy tưởng tượng bạn đang làm việc với một đối tượng Python trong bộ nhớ trông giống như thế này

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}

Điều quan trọng là bạn lưu thông tin này vào đĩa, vì vậy nhiệm vụ của bạn là ghi nó vào một tệp

Sử dụng trình quản lý bối cảnh của Python, bạn có thể tạo một tệp có tên

>>> json.dumps(data)
>>> json.dumps(data, indent=4)
2 và mở tệp đó ở chế độ ghi. (Các tệp JSON kết thúc thuận tiện bằng phần mở rộng
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
3. )

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)

Lưu ý rằng

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3 có hai đối số vị trí. (1) đối tượng dữ liệu được tuần tự hóa và (2) đối tượng giống như tệp mà các byte sẽ được ghi vào

Hoặc, nếu bạn muốn tiếp tục sử dụng dữ liệu JSON được tuần tự hóa này trong chương trình của mình, bạn có thể ghi dữ liệu đó vào đối tượng

json_string = json.dumps(data)
0 gốc của Python

json_string = json.dumps(data)

Lưu ý rằng đối tượng giống như tệp không có vì bạn không thực sự ghi vào đĩa. Ngoài ra,

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
4 cũng giống như
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3

hoan hô. Bạn đã tạo ra một số JSON con và bạn đã sẵn sàng phát hành nó vào thế giới tự nhiên để phát triển lớn mạnh

Loại bỏ các quảng cáo

Một số đối số từ khóa hữu ích

Hãy nhớ rằng, JSON có nghĩa là con người có thể dễ dàng đọc được, nhưng cú pháp có thể đọc được là không đủ nếu tất cả được ghép lại với nhau. Ngoài ra, bạn có thể có phong cách lập trình khác với tôi và bạn có thể dễ dàng đọc mã hơn khi nó được định dạng theo ý thích của bạn

GHI CHÚ. Cả hai phương pháp

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3 và
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
4 đều sử dụng các đối số từ khóa giống nhau

Tùy chọn đầu tiên mà hầu hết mọi người muốn thay đổi là khoảng trắng. Bạn có thể sử dụng đối số từ khóa

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
0 để chỉ định kích thước thụt đầu dòng cho các cấu trúc lồng nhau. Hãy tự mình kiểm tra sự khác biệt bằng cách sử dụng
>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
1 mà chúng tôi đã xác định ở trên và chạy các lệnh sau trong bảng điều khiển

>>>

>>> json.dumps(data)
>>> json.dumps(data, indent=4)

Một tùy chọn định dạng khác là đối số từ khóa

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
2. Theo mặc định, đây là 2-bộ của các chuỗi phân tách
>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
3, nhưng một giải pháp thay thế phổ biến cho JSON nhỏ gọn là
>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
4. Hãy xem lại JSON mẫu để xem những dấu tách này phát huy tác dụng ở đâu

Có những cái khác, như

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
5, nhưng tôi không biết cái đó làm gì. Bạn có thể tìm thấy toàn bộ danh sách trong nếu bạn tò mò

Giải tuần tự hóa JSON

Tuyệt, có vẻ như bạn đã thu thập được một số JSON hoang dã. Bây giờ là lúc để quất nó thành hình. Trong thư viện

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1, bạn sẽ tìm thấy
>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
7 và
>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
8 để biến dữ liệu được mã hóa JSON thành các đối tượng Python

Giống như tuần tự hóa, có một bảng chuyển đổi đơn giản để giải tuần tự hóa, mặc dù bạn có thể đoán nó trông như thế nào rồi

JSONPython

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
6
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
5
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
9
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
7
json_string = json.dumps(data)
1
json_string = json.dumps(data)
0
json_string = json.dumps(data)
5 (int)
json_string = json.dumps(data)
2
json_string = json.dumps(data)
5 (real)
json_string = json.dumps(data)
4
json_string = json.dumps(data)
7
json_string = json.dumps(data)
6
json_string = json.dumps(data)
9
json_string = json.dumps(data)
8
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
1
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
0

Về mặt kỹ thuật, chuyển đổi này không phải là một sự đảo ngược hoàn hảo đối với bảng tuần tự hóa. Về cơ bản, điều đó có nghĩa là nếu bạn mã hóa một đối tượng ngay bây giờ và sau đó giải mã lại sau, bạn có thể không nhận được chính xác cùng một đối tượng. Tôi tưởng tượng nó hơi giống dịch chuyển tức thời. phá vỡ các phân tử của tôi ở đây và đặt chúng lại với nhau ở đó. Tôi vẫn là người như vậy chứ?

Trên thực tế, nó có thể giống như nhờ một người bạn dịch một thứ gì đó sang tiếng Nhật và một người bạn khác dịch lại sang tiếng Anh. Bất chấp điều đó, ví dụ đơn giản nhất sẽ là mã hóa một

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
8 và nhận lại một
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
7 sau khi giải mã, như vậy

>>>

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True

Một ví dụ Deserialization đơn giản

Lần này, hãy tưởng tượng bạn có một số dữ liệu được lưu trữ trên đĩa mà bạn muốn thao tác trong bộ nhớ. Bạn vẫn sẽ sử dụng trình quản lý bối cảnh, nhưng lần này bạn sẽ mở

>>> json.dumps(data)
>>> json.dumps(data, indent=4)
2 hiện có ở chế độ đọc

with open("data_file.json", "r") as read_file:
    data = json.load(read_file)

Mọi thứ khá đơn giản ở đây, nhưng hãy nhớ rằng kết quả của phương pháp này có thể trả về bất kỳ loại dữ liệu được phép nào từ bảng chuyển đổi. Điều này chỉ quan trọng nếu bạn đang tải dữ liệu mà bạn chưa từng thấy trước đây. Trong hầu hết các trường hợp, đối tượng gốc sẽ là một

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
5 hoặc một
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
7

Nếu bạn đã lấy dữ liệu JSON từ một chương trình khác hoặc đã nhận được một chuỗi dữ liệu có định dạng JSON trong Python, thì bạn có thể dễ dàng giải tuần tự hóa dữ liệu đó bằng

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
8, tải tự nhiên từ một chuỗi

json_string = """
{
    "researcher": {
        "name": "Ford Prefect",
        "species": "Betelgeusian",
        "relatives": [
            {
                "name": "Zaphod Beeblebrox",
                "species": "Betelgeusian"
            }
        ]
    }
}
"""
data = json.loads(json_string)

thì đấy. Bạn đã thuần hóa JSON hoang dã và giờ nó nằm trong tầm kiểm soát của bạn. Nhưng những gì bạn làm với sức mạnh đó là tùy thuộc vào bạn. Bạn có thể cho nó ăn, nuôi dưỡng nó và thậm chí dạy cho nó các thủ thuật. Không phải là tôi không tin tưởng bạn… nhưng hãy giữ nó trên dây xích, được chứ?

Loại bỏ các quảng cáo

Một ví dụ trong thế giới thực (đại loại là)

Đối với ví dụ giới thiệu của bạn, bạn sẽ sử dụng JSONPlaceholder, một nguồn dữ liệu JSON giả tuyệt vời cho mục đích thực hành

Trước tiên hãy tạo một tệp script có tên là

import json
import requests
1 hoặc bất kỳ thứ gì bạn muốn. Tôi thực sự không thể ngăn cản bạn

Bạn sẽ cần thực hiện một yêu cầu API cho dịch vụ JSONPlaceholder, vì vậy chỉ cần sử dụng gói

import json
import requests
2 để thực hiện công việc nặng nhọc. Thêm các lần nhập này ở đầu tệp của bạn

import json
import requests

Bây giờ, bạn sẽ làm việc với một danh sách những CẦN LÀM vì…bạn biết đấy, đó là một nghi thức thông qua hoặc bất cứ điều gì

Hãy tiếp tục và yêu cầu API JSONPlaceholder cho điểm cuối

import json
import requests
3. Nếu bạn không quen thuộc với
import json
import requests
2, thì thực sự có một phương thức tiện dụng
import json
import requests
5 sẽ làm tất cả công việc cho bạn, nhưng bạn có thể thực hành sử dụng thư viện
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 để giải tuần tự hóa thuộc tính
import json
import requests
7 của đối tượng phản hồi. Nó sẽ trông giống như thế này

import json
0

Bạn không tin điều này hoạt động? . Trong khi bạn đang ở đó, hãy kiểm tra loại

import json
import requests
8. Nếu bạn cảm thấy thích phiêu lưu, hãy xem qua 10 mục đầu tiên hoặc hơn trong danh sách

>>>

import json
1

Thấy chưa, tôi sẽ không nói dối bạn, nhưng tôi rất vui vì bạn là một người hoài nghi

Chế độ tương tác là gì? . Bạn biết làm thế nào bạn luôn nhảy qua lại giữa trình chỉnh sửa và thiết bị đầu cuối không? . Đây là một mẹo nhỏ tuyệt vời để kiểm tra mã vì nó chạy tập lệnh và sau đó mở ra một dấu nhắc lệnh tương tác với quyền truy cập vào tất cả dữ liệu từ tập lệnh

Được rồi, thời gian cho một số hành động. Bạn có thể xem cấu trúc của dữ liệu bằng cách truy cập điểm cuối trong trình duyệt, nhưng đây là TODO mẫu

import json
2

Có nhiều người dùng, mỗi người có một

import json
00 duy nhất và mỗi tác vụ có một thuộc tính Boolean
import json
01. Bạn có thể xác định người dùng nào đã hoàn thành nhiều tác vụ nhất không?

import json
3

Vâng, vâng, cách triển khai của bạn tốt hơn, nhưng vấn đề là, giờ đây bạn có thể thao tác dữ liệu JSON như một đối tượng Python bình thường

Tôi không biết về bạn, nhưng khi tôi chạy lại tập lệnh tương tác, tôi nhận được kết quả sau

>>>

import json
4

Điều đó thật tuyệt, nhưng bạn ở đây để tìm hiểu về JSON. Đối với nhiệm vụ cuối cùng của bạn, bạn sẽ tạo một tệp JSON chứa TODO đã hoàn thành cho mỗi người dùng đã hoàn thành số lượng TODO tối đa

Tất cả những gì bạn cần làm là lọc

import json
import requests
8 và ghi danh sách kết quả vào một tệp. Để đảm bảo tính độc đáo, bạn có thể gọi tệp đầu ra là
import json
03. Có nhiều cách bạn có thể thực hiện, nhưng đây là một

import json
5

Tuyệt vời, bạn đã loại bỏ tất cả dữ liệu bạn không cần và lưu những nội dung hay vào một tệp hoàn toàn mới. Chạy lại tập lệnh và kiểm tra

import json
03 để xác minh mọi thứ đã hoạt động. Nó sẽ nằm trong cùng thư mục với
import json
import requests
1 khi bạn chạy nó

Bây giờ bạn đã tiến xa đến mức này, tôi cá là bạn đang cảm thấy thích một thứ gì đó khá hấp dẫn, phải không? . khiêm tốn là một đức tính tốt. Tôi có xu hướng đồng ý với bạn mặc dù. Cho đến nay, mọi việc vẫn thuận buồm xuôi gió, nhưng bạn có thể muốn vượt qua các cửa sập cho chặng cuối của hành trình

Loại bỏ các quảng cáo

Mã hóa và giải mã các đối tượng Python tùy chỉnh

Điều gì xảy ra khi chúng tôi cố gắng sắp xếp lớp

import json
06 từ ứng dụng Dungeons & Dragons mà bạn đang làm việc?

import json
6

Không có gì đáng ngạc nhiên, Python phàn nàn rằng

import json
06 không thể tuần tự hóa được (điều này bạn sẽ biết nếu bạn đã từng cố gắng nói với Elf bằng cách khác)

>>>

import json
7

Mặc dù mô-đun

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 có thể xử lý hầu hết các loại Python tích hợp sẵn nhưng nó không hiểu cách mã hóa các loại dữ liệu tùy chỉnh theo mặc định. Nó giống như việc cố gắng lắp một cái chốt vuông vào một cái lỗ tròn—bạn cần có một cái cưa sắt và sự giám sát của cha mẹ

Đơn giản hóa cấu trúc dữ liệu

Bây giờ, câu hỏi đặt ra là làm thế nào để xử lý các cấu trúc dữ liệu phức tạp hơn. Chà, bạn có thể thử mã hóa và giải mã JSON bằng tay, nhưng có một giải pháp thông minh hơn một chút sẽ giúp bạn tiết kiệm được một số công việc. Thay vì chuyển thẳng từ kiểu dữ liệu tùy chỉnh sang JSON, bạn có thể thực hiện một bước trung gian

Tất cả những gì bạn cần làm là trình bày dữ liệu của mình theo các loại tích hợp sẵn

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 đã hiểu. Về cơ bản, bạn dịch đối tượng phức tạp hơn thành một biểu diễn đơn giản hơn, mô-đun
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 sau đó dịch thành JSON. Nó giống như tính chất bắc cầu trong toán học. nếu A = B và B = C thì A = C

Để hiểu rõ điều này, bạn sẽ cần một đối tượng phức tạp để chơi cùng. Bạn có thể sử dụng bất kỳ lớp tùy chỉnh nào bạn thích, nhưng Python có một loại tích hợp có tên là

import json
11 để biểu diễn các số phức và nó không thể tuần tự hóa theo mặc định. Vì vậy, vì những ví dụ này, đối tượng phức tạp của bạn sẽ là một đối tượng
import json
11. Bối rối chưa?

>>>

import json
8

Số phức đến từ đâu?

Một câu hỏi hay để tự hỏi khi làm việc với các loại tùy chỉnh là Lượng thông tin tối thiểu cần thiết để tạo lại đối tượng này là bao nhiêu?

>>>

import json
9

Việc chuyển các số giống nhau vào hàm tạo

import json
11 là đủ để đáp ứng toán tử so sánh
import json
15

>>>

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
0

Việc chia nhỏ các loại dữ liệu tùy chỉnh thành các thành phần thiết yếu của chúng là rất quan trọng đối với cả quy trình tuần tự hóa và giải tuần tự hóa

Mã hóa các loại tùy chỉnh

Để dịch một đối tượng tùy chỉnh thành JSON, tất cả những gì bạn cần làm là cung cấp một hàm mã hóa cho tham số

import json
17 của phương thức
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3. Mô-đun
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 sẽ gọi hàm này trên bất kỳ đối tượng nào không thể tuần tự hóa được. Đây là một chức năng giải mã đơn giản mà bạn có thể sử dụng để thực hành

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
1

Lưu ý rằng bạn sẽ tăng

import json
19 nếu bạn không nhận được loại đối tượng mà bạn mong đợi. Bằng cách này, bạn tránh vô tình đánh số thứ tự cho bất kỳ Yêu tinh nào. Bây giờ bạn có thể thử mã hóa các đối tượng phức tạp cho chính mình

>>>

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
2

Tại sao chúng tôi mã hóa số phức dưới dạng

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
8? . Đó chắc chắn không phải là lựa chọn duy nhất, cũng không hẳn là lựa chọn tốt nhất. Trên thực tế, đây sẽ không phải là một biểu diễn tốt nếu bạn muốn giải mã đối tượng sau này, như bạn sẽ thấy ngay sau đây

Cách tiếp cận phổ biến khác là phân lớp tiêu chuẩn

import json
21 và ghi đè phương thức
import json
22 của nó

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
3

Thay vì tự nâng cao

import json
19, bạn chỉ cần để lớp cơ sở xử lý nó. Bạn có thể sử dụng điều này trực tiếp trong phương thức
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3 thông qua tham số
import json
25 hoặc bằng cách tạo một phiên bản của bộ mã hóa và gọi phương thức
import json
26 của nó

>>>

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
4

Loại bỏ các quảng cáo

Giải mã các loại tùy chỉnh

Mặc dù phần thực và phần ảo của một số phức là hoàn toàn cần thiết, nhưng chúng thực sự không đủ để tạo lại đối tượng. Đây là điều xảy ra khi bạn thử mã hóa một số phức bằng _______27 và sau đó giải mã kết quả

>>>

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
5

Tất cả những gì bạn nhận được là một danh sách và bạn phải chuyển các giá trị vào một hàm tạo

import json
11 nếu bạn muốn có lại đối tượng phức tạp đó. Nhớ lại cuộc thảo luận của chúng ta về. Điều còn thiếu là siêu dữ liệu hoặc thông tin về loại dữ liệu bạn đang mã hóa

Tôi cho rằng câu hỏi mà bạn thực sự nên tự hỏi mình là Lượng thông tin tối thiểu cần thiết và đủ để tạo lại đối tượng này là bao nhiêu?

Mô-đun

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 yêu cầu tất cả các loại tùy chỉnh được thể hiện dưới dạng
import json
30 trong tiêu chuẩn JSON. Để đa dạng, lần này bạn có thể tạo một tệp JSON có tên là
import json
31 và thêm vào sau đây
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
6 đại diện cho một số phức

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
6

Xem một chút thông minh? . Nó không thực sự quan trọng giá trị liên quan là gì. Để hack nhỏ này hoạt động, tất cả những gì bạn cần làm là xác minh rằng khóa tồn tại

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
7

Nếu

import json
33 không có trong từ điển, bạn chỉ cần trả lại đối tượng và để bộ giải mã mặc định xử lý nó

Mỗi khi phương pháp

>>> blackjack_hand = (8, "Q")
>>> encoded_hand = json.dumps(blackjack_hand)
>>> decoded_hand = json.loads(encoded_hand)

>>> blackjack_hand == decoded_hand
False
>>> type(blackjack_hand)

>>> type(decoded_hand)

>>> blackjack_hand == tuple(decoded_hand)
True
7 cố gắng phân tích cú pháp một
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
6, bạn sẽ có cơ hội can thiệp trước khi bộ giải mã mặc định xử lý dữ liệu. Bạn có thể thực hiện việc này bằng cách chuyển chức năng giải mã của mình tới tham số
import json
37

Bây giờ chơi cùng loại trò chơi như trước đây

>>>

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
8

Mặc dù

import json
37 có thể cảm thấy giống như đối trọng với tham số
import json
17 của phương thức
with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
3, nhưng sự tương tự thực sự bắt đầu và kết thúc ở đó

Điều này cũng không chỉ hoạt động với một đối tượng. Hãy thử đặt danh sách các số phức này vào

import json
31 và chạy lại tập lệnh

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
9

Nếu mọi việc suôn sẻ, bạn sẽ nhận được danh sách

import json
11 đối tượng

>>>

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
0

Bạn cũng có thể thử phân lớp con

import json
43 và ghi đè
import json
37, nhưng tốt hơn hết là bạn nên sử dụng giải pháp nhẹ bất cứ khi nào có thể

Tất cả đã được làm xong

Xin chúc mừng, giờ đây bạn có thể sử dụng sức mạnh to lớn của JSON cho bất kỳ và tất cả các nhu cầu Python bất chính của bạn

Mặc dù các ví dụ bạn đã làm việc ở đây chắc chắn là giả tạo và quá đơn giản, nhưng chúng minh họa quy trình làm việc mà bạn có thể áp dụng cho các tác vụ tổng quát hơn

  1. Nhập gói hàng
    with open("data_file.json", "w") as write_file:
        json.dump(data, write_file)
    
    1
  2. Đọc dữ liệu với
    >>> blackjack_hand = (8, "Q")
    >>> encoded_hand = json.dumps(blackjack_hand)
    >>> decoded_hand = json.loads(encoded_hand)
    
    >>> blackjack_hand == decoded_hand
    False
    >>> type(blackjack_hand)
    
    >>> type(decoded_hand)
    
    >>> blackjack_hand == tuple(decoded_hand)
    True
    
    7 hoặc
    >>> blackjack_hand = (8, "Q")
    >>> encoded_hand = json.dumps(blackjack_hand)
    >>> decoded_hand = json.loads(encoded_hand)
    
    >>> blackjack_hand == decoded_hand
    False
    >>> type(blackjack_hand)
    
    >>> type(decoded_hand)
    
    >>> blackjack_hand == tuple(decoded_hand)
    True
    
    8
  3. Xử lý dữ liệu
  4. Viết dữ liệu đã thay đổi bằng
    with open("data_file.json", "w") as write_file:
        json.dump(data, write_file)
    
    3 hoặc
    with open("data_file.json", "w") as write_file:
        json.dump(data, write_file)
    
    4

Những gì bạn làm với dữ liệu của mình sau khi dữ liệu được tải vào bộ nhớ sẽ tùy thuộc vào trường hợp sử dụng của bạn. Nói chung, mục tiêu của bạn sẽ là thu thập dữ liệu từ một nguồn, trích xuất thông tin hữu ích và chuyển thông tin đó cùng hoặc lưu giữ hồ sơ về thông tin đó

Hôm nay bạn đã có một chuyến đi. bạn đã nắm bắt và thuần hóa một số JSON hoang dã, và bạn đã quay ngược thời gian cho bữa tối. Như một phần thưởng bổ sung, việc học gói

with open("data_file.json", "w") as write_file:
    json.dump(data, write_file)
1 sẽ giúp việc học
import json
51 và
import json
52 trở nên nhanh chóng

Chúc may mắn với tất cả những nỗ lực Pythonic trong tương lai của bạn

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Làm việc với dữ liệu JSON trong Python

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Đọc danh sách các đối tượng JSON Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Lucas Lofaro

Đọc danh sách các đối tượng JSON Python
Đọc danh sách các đối tượng JSON Python

Lucas là một Pythoneer lang thang với đầu óc tò mò và mong muốn truyền bá kiến ​​thức cho những người tìm kiếm nó

» Thông tin thêm về Lucas


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Đọc danh sách các đối tượng JSON Python

Aldren

Đọc danh sách các đối tượng JSON Python

Đan

Đọc danh sách các đối tượng JSON Python

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Làm cách nào để đọc danh sách các đối tượng JSON trong Python?

Để tải và phân tích tệp JSON có nhiều đối tượng JSON, chúng ta cần làm theo các bước dưới đây. .
Tạo một danh sách trống gọi là jsonList
Đọc từng dòng tệp vì mỗi dòng chứa JSON hợp lệ. .
Chuyển đổi từng đối tượng JSON thành Python dict bằng cách sử dụng json. .
Lưu từ điển này vào một danh sách có tên là result jsonList

Làm cách nào để phân tích mảng đối tượng JSON trong Python?

Để phân tích chuỗi dữ liệu JSON thành đối tượng Python, hãy sử dụng json. loads() của gói dựng sẵn có tên json . json. phương thức loading() phân tích cú pháp chuỗi dữ liệu JSON được cung cấp và trả về một từ điển Python chứa tất cả dữ liệu từ JSON.

Cách đọc mảng JSON trong gấu trúc?

Cách đọc dữ liệu mảng json bằng gấu trúc Python .
nội dung tệp json. [ {"ID". "123124","Tài khoản__c". "0ereeraw334U","Active__c". "ĐÚNG VẬY"} ]
Mã hiện có để chuyển đổi thành khung dữ liệu. df = pd. read_json(obj['Body'],dtype='unicode',convert_dates=False)
Nhưng cách đọc dữ liệu json bên dưới theo cùng một cách,