Chuyển đổi JSON sang Mảng trong PHP với Demo Trực tuyến – PHP

Hướng dẫn này bao gồm các chi tiết cơ bản của PHP json_encode hàm số. Nó đưa ra các ví dụ về giải mã đầu vào chuỗi JSON thành một mảng PHP.

Nó cũng mô tả các quy ước, quy tắc và giới hạn của hàm PHP JSON này. Đầu tiên, chúng ta hãy xem một ví dụ nhanh về việc chuyển đổi JSON thành một mảng.

Chuyển đổi JSON sang PHP Array

Ví dụ này có một chuỗi JSON ánh xạ con vật với số lượng của nó. Đầu ra của việc chuyển đổi JSON này sẽ trả về một mảng liên kết.

Nó sử dụng PHP json_decode () với boolean true làm tham số thứ hai. Với các tham số giải mã này, JSON sẽ được chuyển đổi thành một mảng PHP.

Ví dụ nhanh

<?php
// JSON string in PHP Array
$jsonString = '{"Lion":101,"Tiger":102,"Crocodile":103,"Elephant":104}';
$phpArray = json_decode($jsonString, true);

// display the converted PHP array
var_dump($phpArray);
?>

Đầu ra

array(4) {
  ["Lion"]=>
  int(101)
  ["Tiger"]=>
  int(102)
  ["Crocodile"]=>
  int(103)
  ["Elephant"]=>
  int(104)
}

Xem bản trình diễn trực tuyến này để nhận kết quả mảng được chuyển đổi từ đầu vào JSON.
Xem bản trình diễn

Xem sơ đồ hiển thị chuỗi JSON đầu vào và đối tượng stdClass đầu ra của giải mã JSON. Trong bài viết trước, chúng ta đã xem các ví dụ về hoạt động ngược lại đang chuyển đổi một mảng PHP thành một chuỗi JSON.
php json sang mảng

PHP json_decode ()

Hàm PHP gốc này giải mã chuỗi JSON thành một cây đối tượng có thể phân tích cú pháp hoặc một mảng. Đây là cú pháp của hàm này.

json_decode(
    string $json,
    ?bool $associative = null,
    int $depth = 512,
    int $flags = 0
): mixed
  1. $ json – Nhập chuỗi JSON.
  2. $ kết hợp – một boolean dựa trên đó định dạng đầu ra khác nhau giữa một mảng kết hợp và một đối tượng stdClass.
  3. $ depth – giới hạn lồng ghép cho phép.
  4. $ flag – Xác định trước các hằng số để kích hoạt các tính năng như xử lý ngoại lệ trong quá trình chuyển đổi JSON sang mảng.

Bạn có thể tìm thêm về chức năng này trong tài liệu chính thức Trực tuyến.

Chuyển đổi JSON sang đối tượng PHP

Chương trình này có một thay đổi nhỏ là không đặt cờ boolean cho hàm json_decode của PHP. Điều này sẽ trả về một cây đối tượng stdClass PHP thay vì một mảng.

<?php
// JSON string in PHP Array
$jsonString = '{"name":"Lion"}';

$phpObject = json_decode($jsonString);
print $phpObject->name;
?>

Đầu ra

Lion

Những lỗi thường gặp trong quá trình chuyển đổi từ JSON sang Array

Chuỗi JSON sau là một đối tượng JSON hợp lệ trong JavaScript, nhưng không phải ở đây trong PHP. Vấn đề là trích dẫn duy nhất. Nó nên được thay đổi thành một dấu ngoặc kép.

Nếu bạn muốn xem ví dụ JavaScript để đọc và hiển thị dữ liệu JSON, bài viết được liên kết có mã.

<?php
// 1. key and value should be within double quotes
$notValidJson = "{ 'lion': 'animal' }";
json_decode($notValidJson); // will return null

// 2. without a quote is also not allowed
$notValidJson = '{ lion: "animal" }';
json_decode($notValidJson); // will return null

// 3. should not have a comma at the end
$notValidJson = '{ "lion": "animal", }';
json_decode($notValidJson); // will return null
?>

Cách chuyển đổi JSON với số nguyên lớn

Điều này có thể đạt được bằng cách đặt tham số bitmask của các hằng số JSON được xác định trước.

Hằng số JSON_BIGINT_AS_STRING được sử dụng để chuyển đổi JSON với dữ liệu có số nguyên lớn.

<?php
$jsonString = '{"largeNumber": 12345678901234567890123}';

var_dump(json_decode($jsonString, false, 512, JSON_BIGINT_AS_STRING));
?>

Đầu ra

object(stdClass)#1 (1) {
  ["number"]=>
  string(20) "12345678901234567890123"
}

Cách gặp lỗi khi sử dụng json_decode

Hàm json_last_error () được sử dụng để trả về thông tin chi tiết về lần xuất hiện lỗi cuối cùng. Ví dụ sau xử lý các trường hợp lỗi có thể xảy ra của hàm PHP JSON này.

<?php
$jsonString = '{"Lion":101,"Tiger":102,"Crocodile":103,"Elephant":104}';
json_decode($jsonString);

switch (json_last_error()) {
    case JSON_ERROR_DEPTH:
        echo 'Error: Nesting limit exceeded.';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo 'Error: Modes mismatch.';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo 'Error: Unexpected character found.';
    break;
    case JSON_ERROR_SYNTAX:
        echo 'Error: Syntax error, invalid JSON.';
    break;
    case JSON_ERROR_UTF8:
        echo 'Error: UTF-8 characters incorrect encoding.';
    break;
    default:
        echo 'Unexpected error.';
    break;
}
?>

BẤT NGỜ! Chuyển đổi JSON sang Mảng và Mảng sang JSON không đối xứng

<?php
 $jsonString = '{"0": "No", "1": "Yes"}';
 	// convert json to an associative array
    $array = json_decode($jsonString, true); 
    print json_encode($array) . PHP_EOL;
?>

Đầu ra

["No","Yes"]

Đối tượng PHP bây giờ được thay đổi thành một mảng PHP. Bạn có thể không mong đợi nó.

Encode -> Decode -> Encode

Ở trên sẽ không trả lại dữ liệu về dạng ban đầu.

Đầu ra của giải mã sang mảng PHP và mã hóa từ mảng PHP không phải lúc nào cũng đối xứng. Tuy nhiên, đầu ra của giải mã từ các đối tượng stdClass và mã hóa đến các đối tượng stdClass luôn đối xứng.

Vì vậy, nếu bạn có kế hoạch thực hiện chuyển đổi theo chu kỳ giữa mảng PHP và chuỗi JSON, thì trước tiên hãy chuyển đổi mảng PHP thành một đối tượng. Chuyển đổi JSON.

Xem bản trình diễn

↑ Quay lại đầu trang

Trả lời