Hướng dẫn how do you analyse json data in python? - làm thế nào để bạn phân tích dữ liệu json trong python?

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Làm việc với dữ liệu JSON trong Python This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Working With JSON Data in Python

Show

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 phải 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 bạn trong cơ sở dữ liệu tài liệu. Bằng cách này hay cách khác, bạn đã lên cổ trong JSON, và bạn đã phải đi ra ngoài.

May mắn thay, đây là một nhiệm vụ khá phổ biến, và là với hầu hết các nhiệm vụ phổ biến, Popthon, làm cho nó gần như dễ dàng một cách dễ chịu. Không sợ hãi, đồng nghiệp Pythoneers và Pythonistas. Điều nà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? Yup, bạn đã hiểu rồi! Nó không có gì khác hơn là một định dạng tiêu chuẩn mà cộng đồng sử dụng để truyền dữ liệu xung quanh. Hãy nhớ rằng, JSON 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 người duy nhất đáng nói trong cùng một hơi thở. Yup, you got it! It’s nothing more than a standardized format the community uses to pass data around. Keep in mind, JSON isn’t the only format available for this kind of work, but XML and YAML are probably the only other ones worth mentioning in the same breath.

A (rất) lịch sử ngắn gọn của JSON

Không có gì đáng 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 liên quan đến cú pháp theo nghĩa đen đối tượng. Họ đã có một trang web tiện lợi giải thích toàn bộ. Mặc dù vậy, đừng lo lắng: JSON từ lâu đã trở thành bất khả tri ngôn ngữ và tồn tại như tiêu chuẩn của riêng nó, vì vậy chúng tôi có thể tránh được JavaScript vì mục đích của cuộc thảo luận này.JavaScript Object Notation was inspired by a subset of the JavaScript programming language dealing with object literal syntax. They’ve got a nifty website that explains the whole thing. Don’t worry though: JSON has long since become language agnostic and exists as its own standard, so we can thankfully avoid JavaScript for the sake of this discussion.

Cuối cùng, cộng đồng lớn đã thông qua JSON vì nó dễ dàng cho cả con người và máy móc tạo ra và hiểu.

Hãy nhìn xem, nó JSON JSON!

Chuẩn bị. Tôi sắp sửa cho bạn thấy một số Json ngoài đời thực giống như bạn nhìn thấy ngoài kia trong tự nhiên. Nó không sao: JSON được cho là có thể đọc được bởi bất kỳ ai đã sử dụng ngôn ngữ theo phong cách C và Python là ngôn ngữ theo phong cách C, vì vậy, 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 loại nguyên thủy, như chuỗi và số, cũng như các 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? Nó có rất nhiều ký hiệu đối tượng phổ quát vào thời điểm này, nhưng tôi không nghĩ rằng Uon lăn ra khỏi lưỡi khá độc đáo. Hãy thoải mái thảo luận về các lựa chọn thay thế trong các ý kiến. I know, right? It’s pretty much universal object notation at this point, but I don’t think UON rolls off the tongue quite as nicely. Feel free to discuss alternatives in the comments.

Whew! Bạn đã sống sót sau cuộc gặp gỡ đầu tiên của bạ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 một gói tích hợp có tên

json_string = json.dumps(data)
0 để 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 tập tin của bạn:

Một từ vựng nhỏ

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 loạt byte (do đó nối tiếp) được lưu trữ hoặc truyền qua một mạng. Bạn cũng có thể nghe thấy thuật ngữ sắp xếp, nhưng đó là một cuộc thảo luận hoàn toàn khác. Đương nhiên, việc giải phóng hóa là quá trình đối ứng của việc giải mã dữ liệu đã được lưu trữ hoặc phân phối theo tiêu chuẩn JSON.serialization. This term refers to the transformation of data into a series of bytes (hence serial) to be stored or transmitted across a network. You may also hear the term marshaling, but that’s a whole other discussion. Naturally, deserialization is the reciprocal process of decoding data that has been stored or delivered in the JSON standard.

Yike! Nghe có vẻ khá kỹ thuật. Chắc chắn. Nhưng trong thực tế, tất cả những gì chúng tôi nói về ở đâ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ớ. Definitely. But in reality, all we’re talking about here is reading and writing. Think of it like this: encoding is for writing data to disk, while decoding is for reading data into memory.

Nối tiếp json

Điều gì xảy ra sau khi một máy tính xử lý rất nhiều thông tin? Nó cần phải lấy một kết xuất dữ liệu. Theo đó, thư viện

json_string = json.dumps(data)
0 hiển thị phương thức
json_string = json.dumps(data)
2 để ghi dữ liệu vào các tệp. Ngoài ra còn có một phương thức
json_string = json.dumps(data)
3 (phát âm là Dump Dump-Siêu) để viết vào chuỗi Python.

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

PythonJson
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,
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
2,
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
3
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
4
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
5
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
6
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
7
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
8
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
9
>>> 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

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

Hãy tưởng tượng bạn làm việc với một đối tượng Python trong bộ nhớ trông hơi 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à viết nó vào một tệp.

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

>>> 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 và mở nó ở chế độ ghi. (Tệp JSON kết thúc thuận tiện trong tiện ích mở rộ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
2.)

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

Lưu ý rằng

json_string = json.dumps(data)
2 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 viết.

Hoặc, nếu bạn có khuynh hướng 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ể viết nó vào một đối tượng Python

json_string = json.dumps(data)
9 gốc.

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ự viết vào đĩa. Ngoài ra,

json_string = json.dumps(data)
3 giống như
json_string = json.dumps(data)
2.

Hoan hô! Bạn đã sinh ra một số em bé JSON, và bạn đã sẵn sàng phát hành nó ra tự nhiên để phát triển lớn và mạnh mẽ.

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

Hãy nhớ rằng, JSON có nghĩa là dễ dàng đọc được bởi con người, nhưng cú pháp có thể đọc được là đủ nếu tất cả đều bị vắt cùng nhau. Ngoài ra, bạn có thể có một 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.

Lưu ý: Cả hai phương thức

json_string = json.dumps(data)
2 và
json_string = json.dumps(data)
3 đều sử dụng cùng một đối số từ khóa.
Both the
json_string = json.dumps(data)
2 and
json_string = json.dumps(data)
3 methods use the same keyword arguments.

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
9 để chỉ định kích thước thụt cho các cấu trúc lồng nhau. Kiểm tra sự khác biệt cho chính mình bằng cách sử dụng
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
0, 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

with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
1. Theo mặc định, đây là 2-Tuple của chuỗi phân cách
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
2, nhưng một giải pháp thay thế phổ biến cho JSON nhỏ gọn là
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
3. Hãy nhìn vào JSON mẫu một lần nữa để xem các phân tách này đi vào nơi nào.

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

with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
4, nhưng tôi không biết điều đó làm gì. Bạn có thể tìm thấy một danh sách toàn bộ trong các tài liệu nếu bạn tò mò.

Deserializing json

Tuyệt vời, có vẻ như bạn đã bắt giữ mình một số Json hoang dã! Bây giờ nó thời gian để đánh nó thành hình dạng. Trong thư viện

json_string = json.dumps(data)
0, bạn sẽ tìm thấy
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
6 và
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
7 để 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 phóng, mặc dù bạn có thể đoán được nó trông như thế nào.

JsonPython
json_string = json.dumps(data)
5
json_string = json.dumps(data)
4
json_string = json.dumps(data)
8
json_string = json.dumps(data)
6
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
0
json_string = json.dumps(data)
9
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
4 (int)
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
1
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
4 (Real)
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
3
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
6
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
5
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
8
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
7
>>> 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
>>> json.dumps(data)
>>> json.dumps(data, indent=4)
9

Về mặt kỹ thuật, chuyển đổi này không phải là một nghịch đảo hoàn hảo với bảng tuần tự hóa. Điều đó về cơ bản 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ó có một chút giống như dịch chuyển tức thời: phá vỡ các phân tử của tôi ở đây và đặt chúng trở lại với nhau ở đó. Tôi vẫn là cùng một người?

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

json_string = json.dumps(data)
7 và lấy lại
json_string = json.dumps(data)
6 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 tùy chọn định dạng khác là đối số từ khóa with open("data_file.json", "r") as read_file: data = json.load(read_file) 1. Theo mặc định, đây là 2-Tuple của chuỗi phân cách with open("data_file.json", "r") as read_file: data = json.load(read_file) 2, nhưng một giải pháp thay thế phổ biến cho JSON nhỏ gọn là with open("data_file.json", "r") as read_file: data = json.load(read_file) 3. Hãy nhìn vào JSON mẫu một lần nữa để xem các phân tách này đi vào nơi nào.

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

with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
4, nhưng tôi không biết điều đó làm gì. Bạn có thể tìm thấy một danh sách toàn bộ trong các tài liệu nếu bạn tò mò.

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

Deserializing json

Tuyệt vời, có vẻ như bạn đã bắt giữ mình một số Json hoang dã! Bây giờ nó thời gian để đánh nó thành hình dạng. Trong thư viện

json_string = json.dumps(data)
0, bạn sẽ tìm thấy
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
6 và
with open("data_file.json", "r") as read_file:
    data = json.load(read_file)
7 để biến dữ liệu được mã hóa JSON thành các đối tượng Python.

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

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

Json

Python

json_string = json.dumps(data)
5

json_string = json.dumps(data)
4

json_string = json.dumps(data)
8

json_string = json.dumps(data)
6

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

response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)

json_string = json.dumps(data)
9

>>>

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

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

>>> json.dumps(data)
>>> json.dumps(data, indent=4)
1 Ah, I thought you’d never ask! You know how you’re always jumping back and forth between the your editor and the terminal? Well, us sneaky Pythoneers use the
response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
8 interactive flag when we run the script. This is a great little trick for testing code because it runs the script and then opens up an interactive command prompt with access to all the data from the script!

Được rồi, thời gian cho một số hành động. Bạn có thể thấy 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, một mẫu TODO:

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

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

response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
9 duy nhất và mỗi tác vụ có thuộc tính boolean
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
00. Bạn có thể xác định người dùng nào đã hoàn thành nhiều nhiệm vụ nhất không?

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

Vâng, vâng, việc triển khai của bạn tốt hơn, nhưng vấn đề là, bây giờ 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 tập lệnh tương tác một lần nữa, tôi nhận được kết quả sau:

>>>

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

Điều đó thật tuyệt và tất cả, 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.completed TODOs for each of the users who completed the maximum number of TODOs.

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

response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
7 và viết danh sách kết quả vào một tệp. Vì mục đích độc đáo, bạn có thể gọi tệp đầu ra
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
02. Có nhiều cách bạn có thể đi về điều này, nhưng ở đây, một:

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

Hoàn hảo, bạn đã thoát khỏi tất cả các dữ liệu bạn không cần và lưu những thứ tốt cho một tập tin hoàn toàn mới! Chạy lại tập lệnh và kiểm tra

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
02 để xác minh mọi thứ hoạt động. Nó sẽ nằm trong cùng thư mục với
response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
0 khi bạn chạy nó.

Bây giờ bạn đã làm cho nó đến nay, tôi cá là bạn cảm thấy như một số thứ khá nóng, phải không? Don lồng nhận được Cocky: Sự khiêm tốn là một đức tính. Tôi có xu hướng đồng ý với bạn mặc dù. Cho đến nay, nó đã được chèo thuyền suôn sẻ, nhưng bạn có thể muốn hạ gục các cửa hầm cho chặng cuối của cuộc hành trình này.

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 tuần tự hóa lớp

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
05 từ ứng dụng Dungeons & Dragons mà bạn đang làm việc?

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

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
05 không phải là serializable (mà bạn đã biết nếu bạn đã từng cố gắng nói với một ELF nếu không):

>>>

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

Điều đó thật tuyệt và tất cả, 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 response = requests.get("https://jsonplaceholder.typicode.com/todos") todos = json.loads(response.text) 7 và viết danh sách kết quả vào một tệp. Vì mục đích độc đáo, bạn có thể gọi tệp đầu ra data = { "president": { "name": "Zaphod Beeblebrox", "species": "Betelgeusian" } } 02. Có nhiều cách bạn có thể đi về điều này, nhưng ở đây, một:

Hoàn hảo, bạn đã thoát khỏi tất cả các dữ liệu bạn không cần và lưu những thứ tốt cho một tập tin hoàn toàn mới! Chạy lại tập lệnh và kiểm tra

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
02 để xác minh mọi thứ hoạt động. Nó sẽ nằm trong cùng thư mục với
response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
0 khi bạn chạy nó.

Bây giờ bạn đã làm cho nó đến nay, tôi cá là bạn cảm thấy như một số thứ khá nóng, phải không? Don lồng nhận được Cocky: Sự khiêm tốn là một đức tính. Tôi có xu hướng đồng ý với bạn mặc dù. Cho đến nay, nó đã được chèo thuyền suôn sẻ, nhưng bạn có thể muốn hạ gục các cửa hầm cho chặng cuối của cuộc hành trình này.

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

>>>

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

Điều đó thật tuyệt và tất cả, 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. You see, when a real number and an imaginary number love each other very much, they add together to produce a number which is (justifiably) called complex.

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

response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
7 và viết danh sách kết quả vào một tệp. Vì mục đích độc đáo, bạn có thể gọi tệp đầu ra
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
02. Có nhiều cách bạn có thể đi về điều này, nhưng ở đây, một:What is the minimum amount of information necessary to recreate this object? In the case of complex numbers, you only need to know the real and imaginary parts, both of which you can access as attributes on the
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
10 object:

>>>

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

Điều đó thật tuyệt và tất cả, 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.

>>>

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

Điều đó thật tuyệt và tất cả, 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 response = requests.get("https://jsonplaceholder.typicode.com/todos") todos = json.loads(response.text) 7 và viết danh sách kết quả vào một tệp. Vì mục đích độc đáo, bạn có thể gọi tệp đầu ra data = { "president": { "name": "Zaphod Beeblebrox", "species": "Betelgeusian" } } 02. Có nhiều cách bạn có thể đi về điều này, nhưng ở đây, một:

Hoàn hảo, bạn đã thoát khỏi tất cả các dữ liệu bạn không cần và lưu những thứ tốt cho một tập tin hoàn toàn mới! Chạy lại tập lệnh và kiểm tra

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
02 để xác minh mọi thứ hoạt động. Nó sẽ nằm trong cùng thư mục với
response = requests.get("https://jsonplaceholder.typicode.com/todos")
todos = json.loads(response.text)
0 khi bạn chạy nó.

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

Bây giờ bạn đã làm cho nó đến nay, tôi cá là bạn cảm thấy như một số thứ khá nóng, phải không? Don lồng nhận được Cocky: Sự khiêm tốn là một đức tính. Tôi có xu hướng đồng ý với bạn mặc dù. Cho đến nay, nó đã được chèo thuyền suôn sẻ, nhưng bạn có thể muốn hạ gục các cửa hầm cho chặng cuối của cuộc hành trình này.

>>>

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

Điều đó thật tuyệt và tất cả, 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. Great question! That certainly wasn’t the only choice, nor is it necessarily the best choice. In fact, this wouldn’t be a very good representation if you ever wanted to decode the object later, as you’ll see shortly.

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
20 và ghi đè phương thức
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
21 của nó:

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

Thay vì tự nâng cao

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
18, 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
json_string = json.dumps(data)
2 thông qua tham số
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
24 hoặc bằng cách tạo một thể hiện của bộ mã hóa và gọi phương thức
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
25 của nó:

>>>

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

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

Mặc dù các phần thực và tưởng tượng của một con số phức tạp 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à những gì xảy ra khi bạn thử mã hóa một số phức với

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
26 và sau đó giải mã kết quả:

>>>

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

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

Mặc dù các phần thực và tưởng tượng của một con số phức tạp 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à những gì xảy ra khi bạn thử mã hóa một số phức với

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
26 và sau đó giải mã kết quả:What is the minimum amount of information that is both necessary and sufficient to recreate this object?

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
10 nếu bạn muốn một lần nữa đối tượng phức tạp đó. Nhớ lại cuộc thảo luận của chúng tôi về dịch chuyển tức thời. Những gì thiếu thiếu là siêu dữ liệu, hoặc thông tin về loại dữ liệu mà bạn mã hóa.

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

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 vừa cần thiết và đủ để tạo lại đối tượng này là bao nhiêu?

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

Mô -đun

json_string = json.dumps(data)
0 dự kiến ​​tất cả các loại tùy chỉnh sẽ được biểu thị là
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
29 trong tiêu chuẩn JSON. Đối với Variety, bạn có thể tạo tệp JSON lần này được gọi là
data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
30 và thêm
json_string = json.dumps(data)
5 sau đây đại diện cho một số phức:

Xem bit thông minh? Đó là khóa

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
32 là siêu dữ liệu mà chúng ta vừa nói đến. Nó không thực sự quan trọng giá trị liên quan là gì. Để khiến bản 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 chính tồn tại:

Nếu

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
32 không có trong từ điển, bạn chỉ có thể trả lại đối tượng và để bộ giải mã mặc định xử lý nó.

>>>

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

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

Mặc dù các phần thực và tưởng tượng của một con số phức tạp 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à những gì xảy ra khi bạn thử mã hóa một số phức với

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
26 và sau đó giải mã kết quả:

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

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
10 nếu bạn muốn một lần nữa đối tượng phức tạp đó. Nhớ lại cuộc thảo luận của chúng tôi về dịch chuyển tức thời. Những gì thiếu thiếu là siêu dữ liệu, hoặc thông tin về loại dữ liệu mà bạn mã hóa.

>>>

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

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

Mặc dù các phần thực và tưởng tượng của một con số phức tạp 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à những gì xảy ra khi bạn thử mã hóa một số phức với data = { "president": { "name": "Zaphod Beeblebrox", "species": "Betelgeusian" } } 26 và sau đó giải mã kết quả:

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
10 nếu bạn muốn một lần nữa đối tượng phức tạp đó. Nhớ lại cuộc thảo luận của chúng tôi về dịch chuyển tức thời. Những gì thiếu thiếu là siêu dữ liệu, hoặc thông tin về loại dữ liệu mà bạn 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 vừa cần thiết và đủ để tạo lại đối tượng này là bao nhiêu?

  1. Mô -đun
    json_string = json.dumps(data)
    
    0 dự kiến ​​tất cả các loại tùy chỉnh sẽ được biểu thị là
    data = {
        "president": {
            "name": "Zaphod Beeblebrox",
            "species": "Betelgeusian"
        }
    }
    
    29 trong tiêu chuẩn JSON. Đối với Variety, bạn có thể tạo tệp JSON lần này được gọi là
    data = {
        "president": {
            "name": "Zaphod Beeblebrox",
            "species": "Betelgeusian"
        }
    }
    
    30 và thêm
    json_string = json.dumps(data)
    
    5 sau đây đại diện cho một số phức:
  2. Xem bit thông minh? Đó là khóa
    data = {
        "president": {
            "name": "Zaphod Beeblebrox",
            "species": "Betelgeusian"
        }
    }
    
    32 là siêu dữ liệu mà chúng ta vừa nói đến. Nó không thực sự quan trọng giá trị liên quan là gì. Để khiến bản 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 chính tồn tại:
  3. Nếu
    data = {
        "president": {
            "name": "Zaphod Beeblebrox",
            "species": "Betelgeusian"
        }
    }
    
    32 không có trong từ điển, bạn chỉ có thể trả lại đối tượng và để bộ giải mã mặc định xử lý nó.
  4. Mỗi khi phương thức
    with open("data_file.json", "r") as read_file:
        data = json.load(read_file)
    
    6 cố gắng phân tích
    json_string = json.dumps(data)
    
    5, bạn sẽ có cơ hội can thiệp trước khi bộ giải mã mặc định có cách với dữ liệu. Bạn có thể làm điều này bằng cách chuyển chức năng giải mã của mình cho tham số
    data = {
        "president": {
            "name": "Zaphod Beeblebrox",
            "species": "Betelgeusian"
        }
    }
    
    36.

Bây giờ chơi cùng một loại trò chơi như trước:

Trong khi

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
36 có thể cảm thấy giống như đối tác với tham số
json_string = json.dumps(data)
2 ____ ____116, 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 tạp này vào

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
30 và chạy lại tập lệnh:

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

data = {
    "president": {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}
10: This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Working With JSON Data in Python

Cách tốt nhất để làm việc với JSON trong Python là gì?

Bắt đầu bằng cách nhập thư viện JSON. Chúng tôi sử dụng chức năng mở để đọc tệp JSON và sau đó là phương thức json.load () để phân tích chuỗi JSON vào từ điển Python có tên Superherosquad.Đó là nó! We use the function open to read the JSON file and then the method json. load() to parse the JSON string into a Python dictionary called superHeroSquad. That's it!

Làm thế nào trích xuất dữ liệu cụ thể từ JSON Python?

Làm thế nào để bạn gọi dữ liệu JSON trong Python ?..
Tạo một tệp python mới một json nhập ..
Crate một từ điển dưới dạng một chuỗi để sử dụng làm json ..
Sử dụng mô -đun JSON để chuyển đổi chuỗi của bạn thành từ điển ..
Viết một lớp để tải dữ liệu từ chuỗi của bạn ..
Khởi tạo một đối tượng từ lớp của bạn và in một số dữ liệu từ nó ..

Phương pháp nào được sử dụng để đọc dữ liệu từ JSON?

Bạn có thể sử dụng phương thức JSON.LOAD () để đọc một tệp có chứa đối tượng JSON.json. load() method to read a file containing JSON object.