PHP xác thực JSON
Thư viện triển khai các thông số kỹ thuật mới nhất (bản nháp-2020-12, bản nháp-2019-09, bản nháp-07 và bản nháp-06) của tiêu chuẩn Lược đồ JSON và cung cấp tài liệu toàn diện bao gồm cả tiêu chuẩn và API riêng của thư viện Show
Trong khi PHP 8. 2 vẫn chưa được phát hành, chúng tôi đã có một cái nhìn thoáng qua về các tính năng mới được cung cấp trong phiên bản 8. 3 năm sau Vào ngày 14 tháng 8, Juan Carlos Morales đã đề xuất Yêu cầu Nhận xét để giới thiệu var_dump(json_validate('{ "test": { "foo": "bar" } }'));9… RFC này giới thiệu một hàm mới gọi là json_validate() để xác thực xem một chuỗi có chứa json hợp lệ hay không Hầu hết các triển khai vùng người dùng đều sử dụng json_decode() mà theo thiết kế sẽ tạo ra một ZVAL(object/array/etc. ) trong khi phân tích cú pháp chuỗi, nên sử dụng bộ nhớ và quá trình xử lý có thể được lưu Hàm được đề xuất sẽ sử dụng cùng một trình phân tích cú pháp JSON đã tồn tại trong lõi PHP, cũng được sử dụng bởi json_decode(), điều này đảm bảo rằng những gì hợp lệ trong json_validate() cũng hợp lệ trong json_decode() Đề xuấtSự miêu tảjson_validate(string $json, int $depth = 512, int $flags = 0): bool Thông sốvar_dump(json_validate('{ "test": { "foo": "bar" } }'));6 Chuỗi json đang được phân tích Chức năng này chỉ hoạt động với các chuỗi được mã hóa UTF-8 Ghi chú PHP triển khai một siêu bộ JSON như được chỉ định trong bản gốc » RFC 7159 var_dump(json_validate('{ "test": { "foo": "bar" } }'));7 Độ sâu lồng nhau tối đa của cấu trúc được giải mã var_dump(json_validate('{ "test": { "foo": "bar" } }'));8 Mặt nạ bit của JSON_INVALID_UTF8_IGNORE. Hành vi của hằng số này được mô tả trên trang hằng số JSON Giá trị trả vềTrả về true nếu chuỗi được truyền chứa json hợp lệ, ngược lại trả về false ví dụ1. Xác thực chuỗi json hợp lệ var_dump(json_validate('{ "test": { "foo": "bar" } }')); Kết quả sẽ là bool(true) 2. Xác thực chuỗi json không hợp lệ var_dump(json_validate('{ "": "": "" } }')); Kết quả sẽ là bool(false) Lỗi trong quá trình xác thực có thể được tìm nạp bằng cách sử dụng json_last_error() và/hoặc json_last_error_msg() Ghi chú chung từ cuộc thảo luận về RFC
Mặc dù không giảm xuống chỉ những ví dụ này, trong quá trình thảo luận trong danh sách gửi thư, một số người dùng đã bày tỏ
Dựa trên thảo luận về RFC trong danh sách gửi thư Theo thiết kế, json_decode() tạo ra một ZVAL (đối tượng/mảng/v.v. ) trong khi phân tích chuỗi, nên sử dụng bộ nhớ và xử lý chuỗi đó, điều đó là không cần thiết nếu điều duy nhất cần khám phá là chuỗi có chứa json hợp lệ hay không Nhược điểm của việc sử dụng regexSử dụng biểu thức chính quy cho tác vụ này buộc phải triển khai khác nhau, dễ bị lỗi, khó bảo trì Nhược điểm của giải pháp userland
PHP đã có trình phân tích cú pháp JSONNhư đã đề cập trước đó, PHP đã có một trình phân tích cú pháp JSON được sử dụng bởi json_decode(). Hàm được đề xuất sẽ sử dụng trình phân tích cú pháp đó, đảm bảo khả năng tương thích 100% giữa json_decode() và json_validate() Nhu cầu từ các dự án lớn và nhà phát triểnTrong phần “Tham khảo”, có một danh sách các dự án php nguồn mở lớn có thể hưởng lợi với chức năng mới này Ngoài ra, trong phần được đề cập, một liên kết đến một trong những câu hỏi phổ biến nhất về StackOverflow được cung cấp, bằng cách nào đó phản ánh nhu cầu của các nhà phát triển của chúng tôi về việc bao gồm một tính năng như thế này Vui lòng kiểm tra phần “Tài liệu tham khảo” Độ phức tạp được thêm vào trong lõiHiện tại, có một trình phân tích cú pháp JSON trong lõi, được sử dụng bởi json_decode() để thực hiện công việc của nó, vì vậy không cần phải viết một trình phân tích cú pháp JSON mới cho RFC này; . trong bộ nhớ cho nó Một thành viên của danh sách gửi thư bày tỏ rằng
Trích dẫn
Trích dẫn
Những thay đổi trong RFC đã xảy ra trong quá trình thảo luậnNém ngoại lệ khi có lỗiTrong quá trình triển khai ban đầu của tôi, nhà phát triển có tùy chọn cung cấp cờ để chỉ ra rằng trong trường hợp có lỗi trong quá trình xác thực, một ngoại lệ sẽ được đưa ra Khả năng đưa ra một ngoại lệ do lỗi đã bị loại bỏ khỏi quá trình triển khai, vì điều này không chỉ được hầu hết người dùng trong danh sách gửi thư chỉ ra (với lý do chính đáng), mà còn trong quá trình xem xét mã; Tôi cũng phải thừa nhận rằng sau khi họ đưa ra lý lẽ của mình, tôi đã thay đổi suy nghĩ của mình và bây giờ tôi cũng nghĩ rằng có một hành vi như vậy trong chức năng Vì vậy, việc loại bỏ khả năng ném ngoại lệ do lỗi đã bị xóa khỏi quá trình triển khai Người khác
Thay đổi không tương thích ngượcKhông có, vì đây chỉ là chức năng mới json_validate sẽ không còn khả dụng dưới dạng tên hàm (Các) Phiên bản PHP được đề xuấtTác động RFCRFC này không ảnh hưởng đến SAPI, các tiện ích mở rộng hiện có, Opcache, v.v. Phạm vi tương lai- (Sẽ được xác định bởi các cuộc thảo luận trong tương lai nếu cần) Lựa chọn bỏ phiếu được đề xuấtThực hiệnNgười giới thiệuCác dự án nguồn mở lớn sẽ được hưởng lợi từ điều nàyKhung Symfony ________số 8Khung Laravel public function validateJson($attribute, $value) { if (is_array($value)) { return false; } if (! is_scalar($value) && ! is_null($value) && ! method_exists($value, '__toString')) { return false; } json_decode($value); return json_last_error() === JSON_ERROR_NONE; } Khung Laravel var_dump(json_validate('{ "test": { "foo": "bar" } }'));0 Magento var_dump(json_validate('{ "test": { "foo": "bar" } }'));1 Magento var_dump(json_validate('{ "test": { "foo": "bar" } }'));2 getgrav var_dump(json_validate('{ "test": { "foo": "bar" } }'));0 Tôn trọng / Xác nhận var_dump(json_validate('{ "test": { "foo": "bar" } }'));1 Tôn trọng / Xác nhận var_dump(json_validate('{ "test": { "foo": "bar" } }'));1 cửa hàng chuẩn bị var_dump(json_validate('{ "test": { "foo": "bar" } }'));3 WordpressCLI var_dump(json_validate('{ "test": { "foo": "bar" } }'));4 CMS JOOMLA var_dump(json_validate('{ "test": { "foo": "bar" } }'));5 Trong PHP, câu hỏi này là một trong những câu hỏi được xếp hạng cao nhất liên quan đến json && php trong stackoverflow, “Cách nhanh nhất để kiểm tra xem một chuỗi có phải là JSON trong PHP không?”. Câu hỏi Đã xem 484 nghìn lần. Bảng xếp hạng Người hỏi cách thực hiện chính xác điều này, đồng thời cung cấp trường hợp sử dụng thực tế; . Trong Python Làm cách nào để kiểm tra xem dữ liệu có phải là JSON PHP không?chúng ta có thể sử dụng hàm PHP json_last_error() để kiểm tra tính hợp lệ của JSON, Hàm này trả về giá trị hằng định sẵn JSON_ERROR_NONE nếu JSON được giải mã thành công .
JSON có thể được xác thực không?Lược đồ JSON là một công cụ mạnh mẽ. Nó cho phép bạn xác thực cấu trúc JSON của mình và đảm bảo cấu trúc đó đáp ứng API bắt buộc . Bạn có thể tạo một lược đồ phức tạp và lồng nhau như bạn cần, tất cả những gì bạn cần là các yêu cầu. Bạn có thể thêm nó vào mã của mình dưới dạng thử nghiệm bổ sung hoặc trong thời gian chạy.
Làm cách nào để kiểm tra xem một đối tượng JSON có khóa trong PHP không?Làm cách nào để tìm khóa của một đối tượng? . Vật. keys(obj) – trả về tất cả các khóa của đối tượng dưới dạng mảng Vật. giá trị (obj) – trả về tất cả các giá trị của đối tượng dưới dạng mảng Vật. entry(obj) – trả về một mảng [key, value] PHP có chấp nhận JSON không?PHP có một số hàm tích hợp để xử lý JSON . |