Kiểm tra định dạng tệp json python

Hỗ trợ một phần cho và , ngoại trừ dynamicRef / recursiveRef$vocabulary (đang tiến hành). Hỗ trợ đầy đủ cho , , và

  • có thể báo cáo lặp đi lặp lại tất cả các lỗi xác thực

  • Truy vấn theo chương trình về thuộc tính hoặc mục xác thực không thành công

  • Cài đặt

    jsonschema có sẵn trên PyPI. Bạn có thể cài đặt bằng pip

    $ pip install jsonschema
    

    Tiện ích bổ sung

    Hai tính năng bổ sung có sẵn khi cài đặt gói, cả hai hiện đều liên quan đến xác thực

    $ jsonschema --instance sample.json sample.schema
    
    0

    • $ jsonschema --instance sample.json sample.schema
      
      0

    • $ jsonschema --instance sample.json sample.schema
      
      2

    Chúng có thể được sử dụng khi cài đặt để bao gồm các phụ thuộc bổ sung, e. g

    $ pip install jsonschema'[format]'
    

    Xin lưu ý rằng sự hiện diện đơn thuần của các phụ thuộc này - hoặc thậm chí đặc điểm kỹ thuật của kiểm tra

    $ jsonschema --instance sample.json sample.schema
    
    0 trong lược đồ - không kích hoạt kiểm tra định dạng (theo đặc điểm kỹ thuật). Vui lòng đọc để biết thêm chi tiết

    Chạy bộ thử nghiệm

    Nếu bạn đã cài đặt

    $ jsonschema --instance sample.json sample.schema
    
    4 (có thể thông qua
    $ jsonschema --instance sample.json sample.schema
    
    5 hoặc trình quản lý gói của bạn), việc chạy
    $ jsonschema --instance sample.json sample.schema
    
    4 trong thư mục kiểm tra nguồn của bạn sẽ chạy bộ thử nghiệm của jsonschema trên tất cả các phiên bản Python mà jsonschema hỗ trợ. Nếu bạn không có tất cả các phiên bản mà jsonschema được thử nghiệm, bạn có thể sẽ muốn chạy bằng cách sử dụng tùy chọn
    $ pip install jsonschema
    
    1 của
    $ jsonschema --instance sample.json sample.schema
    
    4

    Tất nhiên, bạn cũng có thể tự do chạy thử nghiệm trên một phiên bản duy nhất với trình chạy thử nghiệm yêu thích của mình. Các bài kiểm tra trực tiếp trong gói

    $ pip install jsonschema
    
    2

    điểm chuẩn

    Điểm chuẩn của jsonschema sử dụng pyperf. Chạy chúng có thể được thực hiện thông qua

    $ tox -e perf
    

    Cộng đồng

    Đặc tả Lược đồ JSON có Slack, với liên kết mời trên trang chủ của nó. Có thể tìm thấy nhiều người hiểu biết về các lược đồ tác giả ở đó

    Mặt khác, đặt câu hỏi trên Stack Overflow là một cách khác để nhận trợ giúp nếu bạn gặp khó khăn

    Về

    Tôi là Julian Berman

    jsonschema đang ở trên GitHub

    Hãy liên lạc, qua GitHub hoặc cách khác, nếu bạn có điều gì đó cần đóng góp, điều đó rất được hoan nghênh

    Nói chung, bạn cũng có thể tìm thấy tôi trên Libera (nick.

    $ pip install jsonschema
    
    5) trong nhiều kênh khác nhau, bao gồm cả
    $ pip install jsonschema
    
    6

    Nếu bạn cảm thấy vô cùng biết ơn, bạn cũng có thể tài trợ cho tôi

    Và đối với những công ty đánh giá cao jsonschema cũng như sự hỗ trợ và tăng trưởng liên tục của nó, jsonschema hiện cũng có thể được hỗ trợ thông qua TideLift

    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 là

    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 pháp
    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ý ngữ 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 thức

    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

    >>>_______ 49 _______

    >>> 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 ích
    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, 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 thị 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ẽ phải 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 _______17_______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 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

    Kiểm tra định dạng tệp json python

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

    Giới thiệu về Lucas Lofaro

    Kiểm tra định dạng tệp json python
    Kiểm tra định dạng tệp 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à

    Kiểm tra định dạng tệp json python

    Aldren

    Kiểm tra định dạng tệp json python

    Đan

    Kiểm tra định dạng tệp 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 để kiểm tra định dạng JSON trong Python?

    Làm theo các bước bên dưới. .
    Đầu tiên, cài đặt jsonschema bằng lệnh pip. pip cài đặt jsonschema
    Xác định lược đồ. Mô tả loại JSON mà bạn mong đợi
    Chuyển đổi JSON sang đối tượng Python bằng json. tải hoặc json. .
    Truyền JSON kết quả cho phương thức xác thực () của một jsonschema

    Làm cách nào để kiểm tra định dạng tệp JSON?

    Cách đơn giản nhất để kiểm tra xem JSON có hợp lệ hay không là tải JSON vào một JObject hoặc JArray, sau đó sử dụng phương thức IsValid(JToken, JsonSchema) với Lược đồ JSON ) hoặc Validate(JToken, JsonSchema, ValidationEventHandler). . To get validation error messages, use the IsValid(JToken, JsonSchema, IList ) or Validate(JToken, JsonSchema, ValidationEventHandler) overloads.

    Làm cách nào để kiểm tra xem dữ liệu có phải là JSON Python không?

    Bạn có thể thử làm json. loading() , sẽ đưa ra ValueError nếu chuỗi bạn chuyển qua không thể được giải mã dưới dạng JSON. Nói chung, triết lý "Pythonic" cho loại tình huống này được gọi là EAFP, nghĩa là Yêu cầu sự tha thứ dễ dàng hơn là sự cho phép

    Làm cách nào để kiểm tra giá trị JSON trong Python?

    Để truy cập các giá trị, bạn nên chuyển đổi chuỗi JSON thành từ điển python bằng cách sử dụng 'json. loads()' sau khi nhập mô-đun 'json' . Sau đó, bạn có thể kiểm tra xem một khóa có tồn tại trong từ điển hay không và nếu nó tồn tại, bạn có thể truy cập giá trị.