php

Hướng dẫn dùng rfc 7159 trong PHP

  • Định Nghĩa.
  • Cú pháp.
    • Cú pháp:
    • Trong đó:
    • Giá trị trả về.
  • Sự thay đổi trên các phiên bản.
  • Ví dụ.
    • Ví dụ 1 dùng hàm json_decode[] bình thương.
      • code:
      • Kết quả:
    • Ví dụ 2 khi chuyền một thuộc tính đối tượng không hợp lệ.
    • Mô tả:
    • Ví dụ 3 các lỗi phổ biến khi sử dụng json_decode
    • Ví dụ  4 Lỗi độ sâu.
    • Ví dụ 5 sử json_decode [] với các số nguyên lớn.
  • Chú ý.
  • Hàm liên quan.
  • Thông tin thêm.

Định Nghĩa.

Để nhận và giải mã chuỗi đã mã hóa JSON, người ta sử dụng hàm json_decode. Giải mã nói một cách đơn giản là khôi phục dữ liệu đã được mã hoá trở về bản gốc

Cú pháp.

Cú pháp:

json_decode [ string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] ] : mixed

Trong đó:

  • $json Chuỗi cần conver thành JSON.
    – Lưu ý : hàm này chỉ hoạt động với các chuỗi được mã hóa UTF-8.
  • $assoc Khi để là  TRUE, các đối tượng được trả về sẽ được chuyển đổi thành các mảng kết hợp.
  • $options: Set được việc sẽ convert theo định dạng như thế nào và có thể chỉ định được constant bằng cácoption. JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR

Giá trị trả về.

  • Trả về giá trị được mã hóa trong json theo kiểu PHP thích hợp. Các giá trị đúng, sai và null được trả về lần lượt là TRUE, FALSE và NULL. NULL được trả về nếu json không thể được giải mã hoặc nếu dữ liệu được mã hóa sâu hơn giới hạn đệ quy

Lưu ý: khi tham số return được sử dụng, hàm này sử dụng bên trong bộ đệm đầu ra, do đó không thể sử dụng nó trong hàm gọi lại ob_start [].

Sự thay đổi trên các phiên bản.

  • Trên phiên bản PHP 7.3.0 options JSON_THlaw_ON_ERROR đã được thêm vào.
  • 7.2.0 options JSON_INVALID_UTF8_IGNORE, and JSON_INVALID_UTF8_SUBSTITUTEđã được thêm vào.
  • 7.1.0 Khóa JSON trống [“”] có thể được mã hóa thành thuộc tính đối tượng trống thay vì sử dụng khóa có giá trị _empty_.
  • 7.0.0 Đã từ chối các định dạng số không tương thích RFC 7159 – cấp cao nhất [07, 0xff, .1, -.1] và tất cả các cấp [[1.], [1.e1]].
  • 7.0.0 Một chuỗi hoặc giá trị PHP trống mà sau khi truyền sang chuỗi là một chuỗi rỗng [NULL, FALSE] dẫn đến lỗi cú pháp JSON.
  • 5.6.0 Các biến thể không được phân cấp không hợp lệ của các chữ đúng, sai và null không còn được chấp nhận làm đầu vào hợp lệ và sẽ tạo ra các cảnh báo.
  • 5.4.0 options JSON_BIGINT_AS_STRING và JSON_OBJECT_AS_ARRAY được thêm vào.
  • 5.4.0 Các tham số tùy chọn đã được thêm vào.
  • 5.3.0 Đã thêm độ sâu tùy chọn. Độ sâu đệ quy mặc định được tăng từ 128 lên 512.
  • 5.2.3 giới hạnnesting được tăng từ 20 lên 128.
  • 5.2.1 Đã thêm hỗ trợ cho việc giải mã JSON của các loại cơ bản.

Ví dụ.

Ví dụ 1 dùng hàm json_decode[] bình thương.

code:

Kết quả:

object[stdClass]#1 [5] { ["a"] => int[1] ["b"] => int[2] ["c"] => int[3] ["d"] => int[4] ["e"] => int[5] } array[5] { ["a"] => int[1] ["b"] => int[2] ["c"] => int[3] ["d"] => int[4] ["e"] => int[5] }

Ví dụ 2 khi chuyền một thuộc tính đối tượng không hợp lệ.

Mô tả:

Truy cập các phần tử trong một đối tượng có chứa các ký tự không được phép theo quy ước đặt tên của PHP [ví dụ: dấu gạch nối] có thể được thực hiện bằng cách đóng gói tên phần tử trong dấu ngoặc nhọn và dấu nháy đơn.

code:

?php $json = '{"foo-bar": 12345}'; $obj = json_decode[$json]; print $obj->{'foo-bar'}; // 12345 ?>

Ví dụ 3 các lỗi phổ biến khi sử dụng json_decode

code:

Ví dụ  4 Lỗi độ sâu.

code:

$json = json_encode[     array[         1 => array[             'English' => array[                 'One',                 'January'             ],             'French' => array[                 'Une',                 'Janvier'             ]         ]     ] ]; // Xác định các lỗi. $constants = get_defined_constants[true]; $json_errors = array[]; foreach [$constants["json"] as $name => $value] {     if [!strncmp[$name, "JSON_ERROR_", 11]] {         $json_errors[$value] = $name;     } } // Hiển thị các lỗi cho độ sâu khác nhau. foreach [range[4, 3, -1] as $depth] {     var_dump[json_decode[$json, true, $depth]];     echo 'Last error: ', $json_errors[json_last_error[]], PHP_EOL, PHP_EOL; } ?>

Kết quả:

array[1] { [1]=> array[2] { ["English"]=> array[2] { [0]=> string[3] "One" [1]=> string[7] "January" } ["French"]=> array[2] { [0]=> string[3] "Une" [1]=> string[7] "Janvier" } } } Last error: JSON_ERROR_NONE NULL Last error: JSON_ERROR_DEPTH

Ví dụ 5 sử json_decode [] với các số nguyên lớn.

code:

Kết quả:

object[stdClass]#1 [1] { ["number"]=> float[1.2345678901235E+19] } object[stdClass]#1 [1] { ["number"]=> string[20] "12345678901234567890" }

Chú ý.

  • JSON không phải là JavaScript, mà là một tập hợp con của JavaScript.
  • Trong trường hợp không giải mã được, json_last_error [] có thể được sử dụng để xác định bản chất chính xác của lỗi.

Hàm liên quan.

  • json_encode[] – convert data thành định dạng JSON.
  • json_last_error[] – Xác định lỗi khi sử dụng json_encode hay json_decode.

Thông tin thêm.

  • Hãy chắc chắn rằng bạn chuyển nội dung utf8 hoặc json_decode có thể bị lỗi và chỉ trả về giá trị null. đối với những trường hớp nội dung không ở dạng UTF8 bạn có thể dùng như sau.
  • Đôi khi, tôi cần cho phép bình luận trong tập tin json. Vì vậy, tôi đã viết một func nhỏ để xóa các bình luận trong chuỗi json trước khi giải mã nó:

Các bạn có thể xem chi tiết hơn trên php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm json_decode[] trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé.
Cảm ơn các bạn đã ghé thăm codetutam.com

Chủ Đề