JSON sang mảng PHP

Dán một tài liệu JSON để nhận về một literal mảng PHP được định dạng cho tệp nguồn .php: cú pháp mảng ngắn ([...]), thụt lề đúng, các chuỗi được đặt trong dấu nháy chính xác, các đối tượng lồng nhau trở thành mảng liên kết và các mảng vẫn giữ dạng có chỉ mục. Hữu ích khi nhúng fixture API vào bài kiểm thử hoặc tạo dữ liệu ban đầu cho các tệp cấu hình.

Cách chuyển JSON sang PHP

  1. 1

    Dán JSON

    Bất kỳ JSON hợp lệ nào: đối tượng, mảng, lồng sâu.

  2. 2

    Chọn cú pháp

    Ngắn `[...]` (PHP 5.4+) hoặc dài `array(...)` (hiện nay hiếm khi cần).

  3. 3

    Chọn kiểu dấu nháy cho chuỗi

    Dấu nháy đơn (không nội suy, thoát dấu nháy đơn) hoặc dấu nháy kép (cho phép nội suy `$`: thường không phù hợp với dữ liệu).

  4. 4

    Sao chép mảng

    Dán vào tệp `.php` của bạn, gán cho `return`, hoặc bao trong `config([...])`.

Ví dụ

Đầu vào:

{ "app": { "name": "Hyperion", "debug": true, "hosts": ["h1.example.com", "h2.example.com"] } }

Kết quả (cú pháp ngắn, dấu nháy đơn):

[
    'app' => [
        'name' => 'Hyperion',
        'debug' => true,
        'hosts' => [
            'h1.example.com',
            'h2.example.com',
        ],
    ],
]

Ánh xạ kiểu dữ liệu

JSON PHP
chuỗi chuỗi (dấu nháy đơn)
số nguyên int
số (thập phân) float
boolean true / false
null null
mảng (JSON) mảng có chỉ mục
đối tượng (JSON) mảng liên kết

Khi nào dùng mảng liên kết so với mảng có chỉ mục

PHP chỉ có một kiểu mảng nhưng thể hiện cả hai hành vi. Trong khi đó, JSON phân biệt rõ đối tượng và mảng, nên ánh xạ như sau:

  • {} → mảng liên kết (['key' => value]).
  • [] → mảng có chỉ mục ([value, value]).

Bộ tạo luôn giữ nguyên sự phân biệt này; việc trộn lẫn hai kiểu trong PHP là hợp lệ nhưng dễ gây nhầm lẫn.

Những điểm cần lưu ý riêng của PHP

  • Khóa dạng chuỗi số. PHP ép "42" thành khóa số nguyên 42 trong mảng. Nếu JSON của bạn dùng chuỗi số làm khóa và bạn cần giữ chúng ở dạng chuỗi, quá trình chuyển đổi qua lại bằng array_combine sẽ không bảo toàn được.
  • Số nguyên lớn. JSON có thể chứa số nguyên lớn hơn PHP_INT_MAX trên các bản dựng 32 bit. Bộ tạo sẽ cảnh báo khi điều đó có thể xảy ra.
  • UTF-8. Chuỗi PHP là dãy byte; bộ tạo xuất UTF-8 theo đúng nguyên bản. Hãy đảm bảo tệp .php của bạn được lưu ở dạng UTF-8 không có BOM.

Các trường hợp sử dụng

  • Tệp cấu hình. Cả Laravel và Symfony đều dùng cấu hình dạng mảng PHP. Việc chuyển một cấu hình JSON theo kiểu nhà cung cấp hoạt động tốt.
  • Fixture kiểm thử. Fixture của PHPUnit gọn gàng hơn khi ở dạng mảng so với các tệp JSON được nạp lúc chạy.
  • Seeder. Seeder cơ sở dữ liệu trong Laravel thường bắt đầu từ một bản dump JSON rồi trở thành mảng PHP.

Các lỗi thường gặp

  • Chuyển mảng PHP ngược lại thành JSON. json_encode coi mảng liên kết là đối tượng và mảng có chỉ mục là mảng. Nếu bạn trộn chúng (['key' => 'val', 0 => 'x']), đầu ra sẽ là một đối tượng. Hãy giữ các mảng có dạng JSON ở dạng JSON.
  • Dấu nháy kép với dấu nháy đơn. Chuỗi PHP trong dấu nháy đơn cần thoát \'; chuỗi trong dấu nháy kép cần thoát \\", và biến có thể bị nội suy ngoài ý muốn nếu bạn không cẩn thận. Hãy dùng dấu nháy đơn cho dữ liệu.
  • Quên dấu phẩy ở cuối. PHP cho phép chúng từ PHP 7.3 và chúng giúp diff sạch hơn. Bộ tạo thêm chúng theo mặc định.

Câu hỏi thường gặp

Cú pháp ngắn ([...]) đã có từ PHP 5.4 và là lựa chọn chuẩn mực cho mọi mã hiện đại. Cú pháp dài (array(...)) chỉ cần cho mã phải chạy trên PHP 5.3 trở về trước, về cơ bản là các hệ thống cũ.

Có. Tệp cấu hình Laravel là các mảng PHP thông thường được trả về từ một tệp. Dán kết quả của bộ tạo sau return và lưu vào thư mục config/.

Chuỗi PHP trong dấu nháy đơn không nội suy biến hay chuỗi thoát (ngoại trừ \'\\). Với literal dữ liệu, cách này nhanh và an toàn hơn. Dấu nháy kép chỉ quan trọng khi bạn muốn có \n, \t hoặc $variable bên trong chuỗi.

Không, nó xuất ra một literal mảng. Bạn hãy tự bao nó bằng return, const hoặc một thuộc tính lớp khi cần. Giữ đầu ra nhỏ gọn giúp dễ kết hợp.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác