Cú pháp Python có hợp lệ của JSON không?

Một tài liệu JSON có thể chứa bất kỳ số lượng cặp khóa/giá trị nào. Khóa phải là một chuỗi nhưng giá trị có thể là bất kỳ loại nào được hỗ trợ, chẳng hạn như chuỗi, số, boolean, v.v. Giá trị thậm chí có thể là các loại phức tạp như một mảng hoặc đối tượng lồng nhau. Điều này làm cho tài liệu JSON rất linh hoạt và rất phi cấu trúc. Tuy nhiên, điều này làm cho việc xử lý dữ liệu trở nên khó khăn hơn vì nhóm dữ liệu thường lấy dữ liệu thông qua các API có phản hồi thường ở định dạng JSON. Có định dạng dữ liệu nhất quán có thể làm cho đường dẫn dữ liệu mạnh mẽ hơn. Với dữ liệu đầu vào đồng nhất, bạn không cần lo lắng về các loại dữ liệu không mong muốn và mất quá nhiều thời gian cho việc làm sạch dữ liệu. Do đó, bạn có thể tập trung hơn vào phân tích dữ liệu và làm việc hiệu quả hơn

Trong bài đăng này, chúng tôi sẽ giới thiệu cách sử dụng lược đồ JSON để xác thực các tài liệu JSON. Các khái niệm thiết yếu, cũng như các trường hợp sử dụng cơ bản và nâng cao, sẽ được giới thiệu bằng các đoạn mã đơn giản, dễ làm theo

Lược đồ JSON là gì?

Lược đồ JSON là một tài liệu JSON xác định lược đồ của một số dữ liệu JSON. Chà, thành thật mà nói, lời giải thích này khá lạ và khó nắm bắt nhưng sẽ rõ ràng hơn nhiều khi chúng ta xem mã sau. Hiện tại, chúng ta cần hiểu hai điểm

  • Bản thân một lược đồ JSON là một tài liệu JSON hợp lệ với các cặp khóa/giá trị. Mỗi khóa có một ý nghĩa đặc biệt và được sử dụng để xác định lược đồ của một số dữ liệu JSON
  • Lược đồ tương tự như định nghĩa bảng trong cơ sở dữ liệu SQL và xác định kiểu dữ liệu của các trường trong JSON. Nó cũng xác định trường nào là bắt buộc và trường nào là tùy chọn

Hãy bắt đầu với một lược đồ JSON đơn giản

Lược đồ JSON này chỉ định rằng JSON đích là một đối tượng có hai thuộc tính (thường được gọi là khóa/trường và sẽ được sử dụng tương ứng khi thích hợp) và thuộc tính name là bắt buộc. Hãy đi sâu hơn một chút vào từng từ khóa xác thực

  • Từ khóa type chỉ định rằng JSON đích là một đối tượng. Nó cũng có thể là một mảng, thường là một mảng các đối tượng cho các phản hồi API. Chúng ta sẽ xem cách xác định lược đồ của một trường mảng sau. Tuy nhiên, trong hầu hết các trường hợp, type cấp cao nhất hầu như luôn luôn là object
  • Từ khóa properties chỉ định lược đồ cho từng trường của đối tượng JSON. Mỗi trường của JSON đích được chỉ định dưới dạng một cặp khóa/giá trị, với khóa là tên trường thực và giá trị là loại trường trong JSON đích. Từ khóa type cho mỗi trường có cùng ý nghĩa với từ khóa cấp cao nhất. Như bạn có thể tưởng tượng, type ở đây cũng có thể là object. Trong trường hợp này, trường tương ứng sẽ là một đối tượng lồng nhau, như sẽ được trình bày sau
  • Từ khóa required là một mảng chứa các thuộc tính bắt buộc phải có. Nếu bất kỳ tài sản nào được chỉ định ở đây bị thiếu, một ValidationError sẽ được nâng lên

Bên cạnh các từ khóa xác thực thiết yếu, cụ thể là type, propertiesrequired được chỉ định ở trên, còn có các từ khóa lược đồ khác có thể được tìm thấy trong tài liệu trực tuyến và cả trong các lược đồ JSON được tạo tự động bởi một số công cụ

Có hai từ khóa lược đồ, cụ thể là type3 và type4. type5 định nghĩa “bản nháp” được sử dụng cho lược đồ. Nếu type5 không được chỉ định, bản nháp mới nhất sẽ được sử dụng, điều này thường được mong muốn. Bạn có thể dễ dàng bị lạc nếu bạn tập trung quá nhiều vào các bản nháp khi mới bắt đầu. Thông thường chúng ta không cần động đến trường type5 và sẽ giới thiệu một chút về nó ở cuối bài viết này. Mặt khác, type8 định nghĩa một URI cho lược đồ giúp lược đồ hiện tại có thể truy cập được từ bên ngoài bằng các lược đồ khác. Nếu type8 không được chỉ định, thì lược đồ hiện tại chỉ có thể được sử dụng cục bộ, điều này cũng thường được mong muốn, ít nhất là đối với các dự án nhỏ. Tuy nhiên, đối với các dự án lớn hơn, tổ chức của bạn có thể có một hệ thống nội bộ về cách lưu trữ các lược đồ và cách tham chiếu chúng. Trong trường hợp này, bạn có thể đặt từ khóa type8 cho phù hợp

Có hai từ khóa chú thích, cụ thể là type1 và type2, lần lượt chỉ định tiêu đề và mô tả cho lược đồ JSON. Chúng có thể được sử dụng làm tài liệu và có thể làm cho lược đồ của bạn dễ đọc và dễ hiểu hơn. Chúng cũng sẽ được hiển thị độc đáo bằng một số công cụ đồ họa. Để đơn giản, chúng sẽ không được chỉ định trong bài đăng này, nhưng thông thường bạn nên thêm chúng vào dự án của mình để thực hành tốt nhất

Cách xác thực tài liệu JSON lại một lược đồ trong Python?

Trong Python, chúng ta có thể sử dụng thư viện type3 để xác thực một thể hiện JSON (cũng có thể được gọi là tài liệu JSON miễn là nó rõ ràng) dựa trên lược đồ. Nó có thể được cài đặt với pip

Hãy xác thực một số phiên bản JSON dựa trên lược đồ JSON được xác định ở trên. Lưu ý rằng JSON về mặt kỹ thuật là một chuỗi, nhưng chúng ta cần chỉ định dữ liệu cơ bản của JSON để được xác thực, điều này sẽ thuận tiện hơn

Nó cho thấy rằng lược đồ được xác định có thể được sử dụng để xác thực các phiên bản JSON như mong đợi. Loại dữ liệu không chính xác hoặc thiếu một số trường bắt buộc sẽ kích hoạt ValidationError. Tuy nhiên, cần lưu ý rằng theo mặc định, các trường bổ sung được cho phép, đây có thể là những gì bạn muốn hoặc không. Nếu bạn muốn có một lược đồ chặt chẽ và chỉ cho phép các trường được xác định bởi từ khóa properties, bạn có thể chỉ định type6 là type7

Làm cách nào để xác định lược đồ cho trường mảng?

Mặc dù việc có một mảng làm trường cấp cao nhất không quá phổ biến, nhưng việc có nó làm thuộc tính là điều rất phổ biến. Hãy thêm một thuộc tính mảng vào lược đồ của chúng tôi được xác định ở trên. Chúng ta cần đặt type thành type9 và chỉ định type cho mỗi mục bằng từ khóa object1

Như chúng ta thấy, kiểu của các phần tử mảng có thể được kiểm tra chính xác. Tuy nhiên, các mảng trống được cho phép theo mặc định. Để thay đổi hành vi này, chúng tôi có thể đặt object2 thành 1 hoặc số bạn mong đợi có ý nghĩa đối với trường hợp của bạn

Làm cách nào để xác định lược đồ cho trường đối tượng lồng nhau?

Như đã đề cập ở trên, từ khóa type của thuộc tính có cùng ý nghĩa và cú pháp với từ khóa cấp cao nhất. Do đó, nếu type của một thuộc tính là object thì thuộc tính này là một đối tượng lồng nhau. Hãy thêm một thuộc tính object6 vào dữ liệu JSON của chúng ta, đây sẽ là một đối tượng lồng nhau

Như chúng ta thấy, trường đối tượng lồng nhau có cú pháp định nghĩa lược đồ giống hệt như cú pháp cấp cao nhất. Do đó, khá đơn giản để xác định lược đồ cho các đối tượng lồng nhau

Sử dụng object7 để tránh trùng lặp mã

Nếu trường object6 cần được sử dụng ở nhiều vị trí trong cùng một lược đồ thì sao? . Trong định nghĩa lược đồ JSON, chúng ta có thể sử dụng từ khóa object9 để xác định các lược đồ con nhỏ có thể được tham chiếu ở những nơi khác để tránh trùng lặp mã. Hãy cấu trúc lại lược đồ của chúng ta ở trên với object7 để có khả năng tránh trùng lặp mã

Như chúng ta thấy, lược đồ mới sử dụng object7 để xác định một lược đồ con hoạt động giống như trước đây. Tuy nhiên, nó có ưu điểm là có thể tránh được sự trùng lặp mã nếu trường object6 cần được sử dụng ở các vị trí khác nhau của cùng một lược đồ

Làm cách nào để đặt lược đồ cho trường tuple?

Cuối cùng, nếu chúng ta muốn trường properties3 là một bộ với số phần tử cố định thì sao? . Logic chung là một mảng có các mục (object1) và tùy chọn có một số mục được xác định theo vị trí xuất hiện trước các mục bình thường (properties5). Đối với một bộ dữ liệu, chỉ có properties5 nhưng không có object1, điều này đạt được hiệu quả là một bộ dữ liệu có một số phần tử cố định. Và quan trọng, loại cho mỗi phần tử bộ dữ liệu phải được xác định rõ ràng

Nếu bạn muốn xác định lược đồ cho trường tuple, bạn cần có một số kiến ​​thức về bản nháp trong lược đồ JSON, nâng cao hơn một chút. Bản nháp là một tiêu chuẩn hoặc thông số kỹ thuật cho lược đồ JSON và xác định cách lược đồ sẽ được phân tích cú pháp bởi trình xác thực. Có một số bản nháp có sẵn và bản mới nhất là 2020–12. Bạn có thể tìm thấy một danh sách các bản nháp ở đây

Thông thường, chúng ta không cần lo lắng về trường type5 và bản nháp sẽ được sử dụng. Tuy nhiên, khi chúng ta cần định nghĩa một trường tuple, đó là điều mà chúng ta nên chú ý

Nếu thư viện properties9 được cài đặt là phiên bản mới nhất (v4. 9. 0 tại thời điểm viết), thì bản nháp mới nhất (2020–12) sẽ được sử dụng. Nếu đây là phiên bản bạn muốn, bạn không cần chỉ định bản nháp bằng từ khóa type5. Tuy nhiên, cách tốt nhất là luôn chỉ định phiên bản của bản nháp trong lược đồ JSON của bạn để đảm bảo tính rõ ràng. Nó được bỏ qua ở đầu bài đăng này vì lý do đơn giản để bạn không bị choáng ngợp, nhưng bạn nên áp dụng nó trong thực tế

Mặt khác, nếu bạn muốn sử dụng một phiên bản nháp khác thay vì phiên bản mới nhất, bạn cần chỉ định rõ ràng từ khóa type5 với phiên bản nháp. Nếu không, nó sẽ không hoạt động bình thường

Hãy xác định lược đồ cho trường properties3 với các bản nháp lần lượt là 2020–12 và 2019–09, đồng thời trình bày cách sử dụng từ khóa type5 và cách xác định trường bộ dữ liệu tương ứng

Như chúng ta thấy, định nghĩa lược đồ cho trường bộ dữ liệu với dự thảo 2020–12 trực quan hơn bằng cách sử dụng các từ khóa properties5 và object1 và do đó nên sử dụng. Để có giải thích chi tiết hơn về các thay đổi từ 2019–09 đến 2020–12 liên quan đến định nghĩa trường bộ dữ liệu, vui lòng kiểm tra ghi chú phát hành này

Ngoài ra, cần lưu ý rằng ngay cả khi chúng ta muốn trường properties3 là một bộ, thì nó phải được chỉ định dưới dạng một mảng (danh sách trong Python) chứ không phải là một bộ cho trình xác thực. Nếu không, nó sẽ không hoạt động

Sử dụng trình xác thực để xác thực nhiều tài liệu JSON một cách hiệu quả

Nếu bạn có một lược đồ JSON hợp lệ và muốn sử dụng nó để xác thực nhiều tài liệu JSON, thì bạn nên sử dụng phương pháp type7, phương thức này hiệu quả hơn API type8. Trình xác thực là một lớp đặc biệt thực hiện một bản nháp cụ thể. Ví dụ: có type9, type0, type1, v.v. Nếu không có phiên bản nháp nào được chỉ định trong tên lớp, thì bản thân type2 có nghĩa là giao thức (tương tự như giao diện) mà tất cả các lớp trình xác thực phải tuân theo

Bên cạnh phương thức type7 hoạt động tương tự như API type8, bạn có thể sử dụng type5 để kiểm tra xem một lược đồ có hợp lệ với một bản nháp cụ thể hay không. Bạn cũng có thể sử dụng type6 để kiểm tra xem JSON có hợp lệ hay không một cách lặng lẽ, không có ValidationError nào được nêu ra nếu nó không hợp lệ. Hãy chứng minh cách sử dụng các phương thức này bằng một số ví dụ đơn giản để giúp chúng dễ hiểu hơn

Trong bài đăng này, chúng tôi đã giới thiệu lược đồ JSON là gì và cách sử dụng nó để xác thực các loại dữ liệu khác nhau trong tài liệu JSON. Chúng tôi đã đề cập đến các nguyên tắc cơ bản cho các kiểu dữ liệu cơ bản như chuỗi và số, cũng như các kiểu dữ liệu phức tạp như mảng và các đối tượng lồng nhau. Ngoài ra, chúng ta đã học cách tránh trùng lặp mã với từ khóa object7 được sử dụng để xác định các lược đồ con và có thể hữu ích cho các lược đồ phức tạp. Cuối cùng nhưng không kém phần quan trọng, những điều cơ bản của bản nháp được giới thiệu. Bây giờ chúng ta đã biết cách xác định lược đồ của trường bộ dữ liệu với các bản nháp khác nhau và cách xác thực nhiều tài liệu JSON dựa trên cùng một lược đồ hiệu quả hơn bằng trình xác thực sử dụng một bản nháp cụ thể

Cú pháp JSON hợp lệ là gì?

Quy tắc cú pháp JSON . Dữ liệu được phân tách bằng dấu phẩy. Niềng răng xoăn giữ đối tượng. Dấu ngoặc vuông giữ mảng. Data is in name/value pairs. Data is separated by commas. Curly braces hold objects. Square brackets hold arrays.

JSON có tương thích với Python không?

Python hỗ trợ JSON tự nhiên . Python đi kèm với gói tích hợp có tên là json để mã hóa và giải mã dữ liệu JSON.

JSON () trong Python là gì?

Ký hiệu đối tượng JavaScript (JSON) là một định dạng tiêu chuẩn hóa thường được sử dụng để truyền dữ liệu dưới dạng văn bản có thể được gửi qua mạng . Nó được sử dụng bởi rất nhiều API và Cơ sở dữ liệu và cả người và máy đều dễ dàng đọc được. JSON đại diện cho các đối tượng dưới dạng cặp tên/giá trị, giống như từ điển Python.

JSON có phải là chuỗi trong Python không?

phương thức load() cho phép chúng ta đọc tệp dữ liệu JSON và sau đó chuyển đổi dữ liệu thành một đối tượng dữ liệu python tương đương. . Giải mã dữ liệu JSON thành đối tượng Python