logo
GeekFormat

JSON ke PHP

Alat JSON ke PHP online gratis. Ubah JSON menjadi kelas PHP yang dapat langsung dijalankan dalam satu klik. Mendukung dua gaya ArrayObject dan stdClass, otomatis menghasilkan namespace, typed properties (PHP 7.4+), readonly class opsional (PHP 8.1+), implements JsonSerializable. Objek bersarang otomatis dipecah menjadi kelas mandiri, array otomatis diubah menjadi PHP array, berjalan lokal di browser, tidak perlu unggah.

Rekomendasi Terkait

Tentang konverter JSON ke PHP dan pemodelan kelas entitas PHP

Alat JSON ke PHP (JSON to PHP Converter) adalah alat praktis yang secara otomatis mengonversi struktur data JSON menjadi kode kelas PHP standar. Alat ini membebaskan pengembang dari pekerjaan berulang menulis namespace / class / public properti / constructor secara manual, sangat cocok untuk dengan cepat mengonversi contoh JSON dari dokumen antarmuka API menjadi kelas entitas PHP yang dapat langsung di-require ke proyek Composer.

Alat ini mendukung 4 gaya kode arus utama: ① Gaya ArrayObject (mewarisi \ArrayObject, mendukung akses array dan objek, umum di ekosistem Laravel / Symfony Serializer); ② Gaya stdClass (mewarisi \stdClass, hanya mendukung akses objek, perilaku default WordPress / json_decode); ③ Gaya readonly class (final readonly class PHP 8.1+, tidak dapat diubah setelah konstruksi, cocok untuk DTO); ④ Gaya integrasi Laravel (mengimplementasikan Jsonable + Arrayable, terintegrasi dengan Eloquent API Resource). Pengembang dapat memilih secara bebas sesuai framework yang digunakan dalam proyek.

Pemetaan tipe PHP adalah inti dari JSON ke PHP. Alat memetakan tipe dasar JSON ke tipe standar PHP: string menjadi string, integer menjadi int, floating-point menjadi float, boolean menjadi bool, array menjadi array, objek bersarang menjadi class mandiri (huruf kapital pertama dari nama field), null menjadi ?type (properti nullable). Semua properti dideklarasikan dengan typed properties PHP 7.4+, IDE dapat langsung melakukan pengecekan tipe.

Sorotan pembeda lainnya adalah 'Implementasi otomatis antarmuka JsonSerializable': setiap kelas PHP yang dihasilkan alat ini secara otomatis mengimplementasikan \JsonSerializable, menghasilkan metode public function jsonSerialize(): mixed { return [...] }. Ini berarti Anda dapat langsung mengeluarkan string JSON dengan echo json_encode($user), json_encode akan secara otomatis memanggil data array yang dikembalikan oleh jsonSerialize(). Dikombinasikan dengan antarmuka Jsonable di Laravel, Anda dapat langsung menggunakan return response()->json($user) tanpa pemrosesan tambahan.

Berbeda dengan beberapa alat online yang perlu mengunggah JSON ke server untuk diproses, semua perhitungan alat ini diselesaikan di dalam browser. quicktype-core dimuat dan dijalankan melalui Web Worker, parsing JSON, inferensi tipe, pembuatan kode PHP, pengemasan ZIP semuanya dilakukan secara lokal, tidak mengirim data ke server mana pun. Ini sangat penting untuk JSON yang berisi kunci API, field privasi pengguna, struktur bisnis yang belum dirilis, data dihapus dari memori saat halaman ditutup.

Kode yang dihasilkan biasanya perlu ditempatkan di proyek Composer untuk digunakan. Pastikan versi PHP di composer.json memenuhi persyaratan (PHP 7.4+ mendukung typed properties, PHP 8.1+ mendukung readonly class), salin kelas yang dihasilkan ke direktori src, dan autoload dengan namespace (PSR-4). Kemudian konsumsi data dengan json_decode($jsonString, false) atau json_decode($jsonString, true) + deserialisasi, nikmati kenyamanan sistem tipe PHP.

Kasus penggunaan

  • Pengembangan backend Laravel: dengan cepat mengonversi contoh JSON dari dokumen antarmuka API menjadi kelas Eloquent Model / API Resource, langsung menserialisasi respons dengan antarmuka Jsonable / Arrayable bawaan Laravel
  • Integrasi Symfony Serializer: mengonversi JSON yang dikembalikan oleh API pihak ketiga menjadi kelas PHP gaya ArrayObject, melakukan pemetaan objek terperinci dan validasi data dengan Symfony Serializer
  • WordPress REST API: mengonversi struktur JSON yang dikembalikan oleh endpoint kustom menjadi kelas PHP gaya stdClass, langsung mengeluarkan dengan wp_send_json(), menyesuaikan perilaku default wp_json_encode()
  • readonly DTO PHP 8.1+: mengonversi JSON menjadi final readonly class sebagai objek transfer data (DTO), tidak dapat diubah setelah konstruksi, mencegah logika bisnis salah mengubah data respons
  • Pengembangan paket Composer: mengonversi JSON Schema menjadi kelas PHP lalu mempublikasikannya ke Packagist sebagai lapisan model SDK, dapat di-require dan digunakan kembali oleh proyek Composer lain
  • Fixture pengujian unit: mengonversi fixture JSON menjadi kelas PHP, melakukan penggerakan data pengujian dengan json_decode + deserialisasi, melakukan asersi pada field terstruktur
  • Skrip migrasi data: mengonversi file konfigurasi JSON menjadi kelas PHP untuk akses bertipe kuat dalam logika bisnis, lebih mudah untuk autocompletion IDE dan pengecekan tipe daripada akses array
  • Kolaborasi Mock frontend: backend pertama mengonversi model JSON menjadi kelas PHP, frontend mendapatkan TypeScript interface / kelas PHP yang sesuai secara bersamaan untuk menjaga konsistensi tipe di kedua sisi
  • Tinjauan kode: langsung mengonversi JSON respons API menjadi kelas PHP yang mudah dibaca, memudahkan diskusi penamaan field, visibilitas properti saat Code Review
  • Refactoring proyek legacy: memfaktorkan ulang kode akses dinamis berdasarkan array asosiatif menjadi akses bertipe kuat berbasis kelas PHP, melakukan analisis statis dengan PHPStan / Psalm
  • PHPUnit DataProvider: mengonversi data pengujian JSON menjadi kelas PHP dan menginjeksi ke kasus pengujian melalui DataProvider, IDE secara otomatis menyarankan field properti
  • Koneksi API backend snake_case: ketika API backend mengembalikan field snake_case, aktifkan 'Ubah ke camelCase' + gaya ArrayObject di sistem PHP frontend untuk koneksi yang mulus
  • Analisis statis PHPStan: kelas yang dihasilkan secara alami memiliki deklarasi tipe, menangkap kesalahan tipe dengan phpstan analyse --level=8 di CI
  • Edukasi dan pelatihan: mengonversi contoh JSON menjadi kelas PHP dalam skenario pendidikan PHP, mendemonstrasikan pemodelan berorientasi objek, sistem tipe, implementasi antarmuka
  • Lapisan API Gateway: mengonversi JSON yang dikembalikan oleh mikroservis hulu menjadi kelas PHP untuk agregasi di lapisan gateway, layanan PHP hilir mengonsumsi data bertipe kuat melalui properti kelas
  • Konsumsi pesan antrean: mengonversi badan pesan JSON yang dikonsumsi dari RabbitMQ / Kafka menjadi kelas PHP untuk penyimpanan atau penerusan, melakukan parsing ketat dengan JSON_THROW_ON_ERROR
  • Pemodelan SKU/SPU e-commerce: mengonversi struktur JSON produk (multi-spesifikasi/multi-gambar/multi-atribut) menjadi kelas PHP, melakukan optimalisasi kueri N+1 di Laravel dengan gaya ArrayObject
  • Verifikasi tanda tangan callback WebHook: mengonversi struktur verifikasi tanda tangan JSON dari gateway pembayaran, callback logistik menjadi kelas PHP, melakukan pemeriksaan tanda tangan dengan hash_hmac()
  • Toolchain OpenAPI: mengonversi JSON skema OpenAPI 3.x menjadi kelas PHP, menghubungkan ke alur pembuatan klien PHP Swagger Codegen / Apifox
  • Pipeline ETL data: mengonversi JSON dari sumber data hulu (field JSON MySQL / MongoDB / Elasticsearch) menjadi kelas PHP untuk pembersihan dan penyimpanan data

Cara Penggunaan

  1. Tempel objek JSON (direkomendasikan) atau array ke editor di sebelah kiri, atau klik 'Sample' untuk memuat contoh Indonesia (termasuk address / company / tags bersarang)
  2. Klik tombol 'Settings' di toolbar, pilih berikut di popup: ① Atur nama kelas root (mis. User) dan namespace (mis. App\Models); ② Pilih gaya kode (ArrayObject / stdClass / readonly class); ③ Pilih fitur kode (typed properties / integrasi Laravel / Symfony Serializer); ④ Pilih strategi penamaan field (tetap asli / camelCase / semua huruf kecil / UPPER_SNAKE)
  3. Alat akan mengonversi secara otomatis dalam 400ms, menampilkan semua kelas PHP yang dihasilkan di sebelah kanan (setiap kelas adalah kartu mandiri, bilah judul menampilkan badge gaya saat ini secara real-time); jika ada kesalahan format JSON, tombol 'Perbaiki JSON' akan ditampilkan
  4. Periksa apakah nama kelas, nama properti, antarmuka yang dihasilkan sesuai harapan; jika perlu penyesuaian, ubah nama kunci JSON sumber atau buka kembali Settings untuk mengubah opsi
  5. Setelah puas, klik tombol 'Salin' pada kelas individual untuk menempel ke IDE, atau klik 'Download ZIP' di toolbar untuk mengunduh semua kelas sekaligus (diatur menurut struktur direktori sesuai jalur namespace)

Fitur

  • Dua gaya kode dapat diubah secara bebas: ArrayObject (mewarisi \ArrayObject, mendukung akses gaya array $obj['key']) / stdClass (mewarisi \stdClass, mendukung akses gaya objek $obj->key), kompatibel dengan berbagai skenario seperti serialisasi Laravel, WordPress REST, Symfony Serializer
  • Template PHP lengkap: otomatis menghasilkan deklarasi namespace + pernyataan use + komentar header class (Copyright + timestamp pembuatan) + definisi class + properti public bertipe (PHP 7.4+), dapat langsung di-require ke proyek Composer tanpa melengkapi boilerplate secara manual
  • Implementasi otomatis antarmuka JsonSerializable: setiap kelas otomatis menghasilkan public function jsonSerialize(): mixed { return [...] }, dapat langsung menserialisasi JSON dengan json_encode(), tanpa kode boilerplate tambahan
  • Opsi readonly class PHP 8.1+: setelah diaktifkan, class yang dihasilkan akan ditambahkan final readonly class, semua properti menjadi readonly dan tidak dapat diubah setelah konstruksi, cocok untuk skenario DTO respons API yang tidak dapat diubah
  • Inferensi tipe cerdas: string → string, integer → int, float → float, bool → bool, array → array, objek bersarang → class mandiri, null → ?type (properti nullable), tidak perlu menentukan tipe field secara manual
  • Pemecahan kelas bersarang otomatis: objek bersarang menggunakan huruf kapital pertama dari nama field sebagai nama kelas PHP mandiri (mis. address → Address), objek dalam array mengikuti aturan 'hapus huruf s di akhir' (mis. users → User), semua kelas bersarang juga mengimplementasikan JsonSerializable
  • 4 strategi penamaan field: tetap asli / snake_case ke camelCase (user_name → userName) / semua huruf kecil / gaya konstanta UPPER_SNAKE, memenuhi konvensi kode PSR-1 / Laravel / Symfony
  • Integrasi sekali klik Laravel: setelah dicentang, otomatis mengimplementasikan antarmuka Jsonable, Arrayable, menambahkan metode toArray() / toJson(), dapat langsung digunakan sebagai Eloquent API Resource dengan autoload Composer
  • Salin kelas tunggal + unduh ZIP banyak file: setiap kelas PHP memiliki tombol 'Salin' mandiri, paket ZIP yang diatur menurut struktur direktori namespace dapat diunduh dalam satu klik (mis. App/Models/User.php), dapat langsung digunakan setelah diekstrak
  • Berjalan lokal di browser + riwayat: parsing JSON, pembuatan kelas PHP, pengemasan ZIP semuanya diselesaikan di browser oleh JavaScript (quicktype-core + JSZip), data tidak diunggah ke server; 200 input terbaru disimpan sebagai riwayat di localStorage

Contoh Kode

PHP: Serialisasi kelas yang dihasilkan alat dengan json_encode()

php

Kelas PHP yang dihasilkan oleh alat ini mengimplementasikan antarmuka JsonSerializable secara default, mengembalikan JSON langsung dengan json_encode() tanpa pemrosesan tambahan apa pun.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// Simulasikan string JSON yang diterima dari API
$jsonString = '{"id":1,"name":"Alice","email":"a****@***********","isActive":true}';

// 1) Deserialisasi ke kelas yang dihasilkan oleh alat ini
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) Akses field bertipe kuat (autocompletion IDE + pemeriksaan statis PHPStan)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? 'Aktif' : 'Tidak Aktif'; // Aktif

// 3) json_encode() memanggil otomatis jsonSerialize(), tidak perlu kode tambahan
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "isActive": true
}
*/

PHP: Contoh integrasi Laravel API Resource

php

Setelah mencentang integrasi Laravel, kelas yang dihasilkan alat ini dapat langsung digunakan sebagai Eloquent API Resource, memformat respons dengan toArray() / toJson().

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * GET /api/users/{id}
     */
    public function show(int $id): JsonResponse
    {
        // 1) Ambil data dari database atau API eksternal
        $userData = $this->fetchUserFromApi($id);

        // 2) Bungkus dengan kelas User yang dihasilkan alat ini
        $user = new User(
            $userData['id'],
            $userData['name'],
            $userData['email'],
            $userData['isActive']
        );

        // 3) Langsung return response()->json($user)
        //    Laravel akan otomatis memanggil jsonSerialize()
        return response()->json($user);
    }

    /**
     * POST /api/users
     */
    public function store(Request $request): JsonResponse
    {
        // 4) Penggunaan terbalik: deserialisasi JSON permintaan menjadi kelas User
        $user = User::fromArray($request->all());

        // 5) Dapatkan bentuk array dengan toArray()
        $payload = $user->toArray();

        // 6) Jalankan logika bisnis (seperti simpan ke DB / panggil API pihak ketiga)
        $this->userService->create($payload);

        return response()->json([
            'message' => 'User created',
            'data' => $user,
        ], 201);
    }
}

/*
 * Dependensi composer.json yang sesuai:
 * "require": {
 *     "php": "^8.1",
 *     "laravel/framework": "^11.0"
 * }
 */

PHP: Contoh integrasi Symfony Serializer

php

Kelas yang dihasilkan alat ini dalam gaya ArrayObject dapat digunakan dengan komponen Symfony Serializer untuk serialisasi dan deserialisasi terperinci, cocok untuk lapisan API Gateway yang kompleks.

<?php

namespace App\Service;

use App\Models\User;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;

class UserSerializer
{
    private SerializerInterface $serializer;

    public function __construct(SerializerInterface $serializer)
    {
        // Menggunakan PropertyNormalizer untuk menangani properti public
        $this->serializer = $serializer;
    }

    /**
     * Serialisasi objek User menjadi string JSON
     */
    public function toJson(User $user): string
    {
        return $this->serializer->serialize($user, 'json');
    }

    /**
     * Deserialisasi string JSON menjadi objek User
     */
    public function fromJson(string $json): User
    {
        return $this->serializer->deserialize($json, User::class, 'json');
    }

    /**
     * Deserialisasi batch (seperti array JSON yang diekspor dari MongoDB)
     */
    public function fromJsonArray(string $jsonArray): array
    {
        $users = [];
        $data = json_decode($jsonArray, true);

        foreach ($data as $item) {
            $users[] = User::fromArray($item);
        }

        return $users;
    }
}

// Contoh penggunaan
$serializer = new UserSerializer($serializerService);

$json = '{"id":1,"name":"Alice","address":{"city":"Beijing","zip":"100000"},"tags":["php","symfony"]}';

// Deserialisasi menjadi objek User yang dihasilkan alat ini
$user = $serializer->fromJson($json);
echo $user->name;                  // Alice
echo $user->address->city;         // Beijing (akses bertipe kuat)
print_r($user->tags);              // ['php', 'symfony']

// Serialisasi kembali ke JSON
$jsonOutput = $serializer->toJson($user);

Best Practices

Di sebagian besar proyek backend PHP, kelas yang dihasilkan gaya ArrayObject mendukung akses array ($obj['key']) dan akses objek ($obj->key), bersama dengan antarmuka JsonSerializable yang diimplementasikan secara default, json_encode() akan secara otomatis memanggil array yang dikembalikan oleh jsonSerialize(). Ini adalah cara penulisan pembawa data objek yang paling serbaguna di ekosistem PHP, kompatibel dengan hampir semua framework arus utama seperti Laravel, Symfony, CodeIgniter.

readonly class yang diperkenalkan PHP 8.1+ adalah praktik terbaik untuk DTO: properti tidak dapat diubah setelah konstruksi, mencegah logika bisnis salah mengubah data respons; promosi constructor membuat kode lebih ringkas (satu baris public function __construct(public int $id, public string $name) {} menyelesaikan deklarasi properti). Disarankan mengonversi DTO respons API, struktur callback WebHook, model klien API pihak ketiga ke gaya readonly class.

Field database Laravel default snake_case, tetapi properti PHP direkomendasikan camelCase. Strategi 'Ubah ke camelCase' alat ini mengonversi secara otomatis, kunci array return dari jsonSerialize() mempertahankan snake_case asli sehingga output json_encode() tetap snake_case. Ini mematuhi kebiasaan akses model Laravel sambil menjaga kompatibilitas API.

Paket ZIP yang dihasilkan diatur menurut jalur namespace (mis. App/Models/User.php). Atur bagian autoload.psr-4 di composer.json, mis: "App\\": "src/", lalu jalankan composer dump-autoload. Ini membuat Composer otomatis memetakan App\Models\User ke src/Models/User.php, tidak perlu require manual.

Alat ini menghasilkan typed properties (PHP 7.4+) secara default, PHPStan dapat sepenuhnya menyimpulkan tipe properti dalam mode --level=8. Disarankan mengintegrasikan phpstan analyse ./src --level=8 ke pipeline CI untuk menangkap kesalahan tipe. Psalm juga mendukung PropertyTypeProvider untuk verifikasi tipe kuat.

Alat ini berjalan sepenuhnya secara lokal di browser, tidak mengunggah data apa pun. Tetapi biasakan: ① Desensitisasi JSON yang berisi kunci API/token/privasi pengguna sebelum konversi; ② Pastikan koneksi jaringan terputus saat menggunakan alat ini untuk struktur bisnis internal skala besar (antarmuka yang belum dirilis); ③ Jangan mengkomit data sampel yang berisi informasi sensitif ke repositori publik setelah pembuatan kode.

Objek JSON bersarang secara rekursif menghasilkan kelas PHP mandiri. Jika level bersarang JSON melebihi 6 lapisan (seperti menu bersarang multi-level, bagan organisasi, dokumen bisnis kompleks), jumlah kelas yang dihasilkan akan meledak (N kelas bersarang per lapisan), membuat pemuatan IDE lambat dan sulit dipelihara. Rekomendasi: ① Bagi JSON menjadi beberapa modul untuk konversi terpisah; ② Atau refactor manual ke akses indeks array ($user['profile']['address']['city']) setelah pembuatan sebagai pengganti kelas bersarang.

Nilai JSON null secara default disimpulkan sebagai ?mixed (nullable mixed), ini adalah fallback yang aman tetapi bukan tipe yang akurat. Jika tipe field sudah diketahui (mis. "nickname": "" akan menyimpulkan string), pertama-tama berikan nilai sampel pada JSON sumber, hapus nilai sampel setelah pembuatan lalu ubah ke tipe yang akurat seperti ?string, ini akan sangat meningkatkan akurasi analisis statis PHPStan.

Pertanyaan Umum

Bagaimana cara mengonversi JSON ke kelas PHP?

Tempel konten JSON ke kotak input di sebelah kiri, alat akan mengonversi secara otomatis dalam 400ms; atau klik tombol 'Convert' di toolbar. Setelah konversi selesai, semua kelas PHP yang dihasilkan akan ditampilkan di sebelah kanan, setiap kelas memiliki tombol 'Salin' mandiri; klik 'Download ZIP' di toolbar untuk mengemas dan mengunduh semua kelas sekaligus (termasuk struktur direktori namespace).

Struktur data JSON apa yang didukung?

Mendukung dua struktur: ① Objek JSON (sebagai kelas root, class RootClass dibuat otomatis); ② Array JSON (menggunakan objek pertama dalam array sebagai templat kelas root). Semua objek bersarang diproses secara rekursif menjadi kelas mandiri; objek dalam array diproses secara rekursif menjadi kelas yang sesuai dengan tipe elemen array.

Apa yang termasuk dalam kelas PHP yang dihasilkan?

Setiap file .php yang dihasilkan meliputi: ① Komentar header file (Copyright + timestamp pembuatan otomatis); ② Deklarasi namespace; ③ Pernyataan use (otomatis mengimpor \JsonSerializable / \ArrayAccess dll. sesuai kebutuhan); ④ Definisi class (ArrayObject / stdClass / readonly class sesuai pengaturan); ⑤ Antarmuka yang diimplementasikan (JsonSerializable / Jsonable / Arrayable sesuai pengaturan); ⑥ Properti public bertipe (PHP 7.4+); ⑦ Constructor (menghasilkan penetapan semua properti sesuai pengaturan); ⑧ Metode jsonSerialize() / toArray() / toJson() dll. Sepenuhnya kompatibel dengan pemeriksaan sintaks php -l dan penggunaan require.

Apa perbedaan antara gaya ArrayObject dan stdClass?

Gaya ArrayObject: kelas yang dihasilkan mewarisi \ArrayObject, mendukung akses array $obj['key'] dan akses objek $obj->key, mengembalikan data objek saat json_encode(). Gaya stdClass: kelas yang dihasilkan mewarisi \stdClass, hanya mendukung akses objek $obj->key, lebih ringan tetapi tidak dapat mengakses array secara langsung. Ekosistem Laravel / WordPress menggunakan gaya stdClass secara default (perilaku default json_decode), Symfony Serializer menggunakan gaya ArrayObject secara default.

Apakah mendukung pembuatan Laravel API Resource?

Ya. Setelah mencentang opsi 'Integrasi sekali klik Laravel' di pengaturan, alat akan otomatis mengimplementasikan antarmuka Jsonable, Arrayable, menambahkan metode toJson($options = 0) dan toArray(). Kelas yang dihasilkan dapat langsung digunakan di Eloquent API Resource (seperti new UserResource($user) atau $user->toArray() dll.). Juga otomatis menggunakan Illuminate\Contracts\Support\Jsonable dan Illuminate\Contracts\Support\Arrayable.

Seperti apa kode yang dihasilkan dalam mode readonly class PHP 8.1?

Setelah mengaktifkan readonly class, kelas PHP yang dihasilkan akan sangat disederhanakan. Misalnya class User dengan readonly aktif menjadi sekitar 12 baris: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Semua properti dideklarasikan sebagai readonly melalui promosi properti constructor dan tidak dapat diubah setelah konstruksi. Catatan: proyek memerlukan PHP 8.1+, field readonly hanya dapat ditetapkan melalui constructor.

Bagaimana cara mengonversi nama field snake_case ke camelCase?

Pilih mode 'Ubah ke camelCase' di grup 'Strategi penamaan field' di popup Settings, alat akan otomatis mengonversi nama field JSON dari snake_case ke gaya penamaan yang direkomendasikan PHP. Mis. user_name → userName, created_at → createdAt, is_active → isActive. Selain itu, jika JSON berasal dari route binding Laravel, properti kelas dapat diakses langsung dengan $request->userName, tidak perlu konversi menengah secara manual.

Bagaimana objek JSON bersarang diproses?

Alat secara otomatis membuat kelas PHP mandiri untuk objek bersarang. Aturan penamaan: kunci objek bersarang menggunakan huruf kapital pertama sebagai nama kelas (mis. address → Address), kunci objek dalam array menghapus huruf s di akhir lalu menggunakan huruf kapital pertama (mis. users → User). Semua kelas bersarang juga menyertakan field lengkap, constructor, metode jsonSerialize(), namespace konsisten dengan kelas root, dapat diimpor dengan use App\Models\Address.

Apakah field array otomatis diubah menjadi PHP array?

Ya. Field array JSON otomatis diubah menjadi properti PHP array, tipe elemen disimpulkan secara otomatis dari elemen pertama array. Mis. ["a","b","c"] → array (dianotasi sebagai array<string> dalam komentar); [{...},{...}] → array (dianotasi sebagai array<User> dalam komentar, User adalah kelas baru yang dinamai dari kunci); array kosong [] default menjadi array (dianotasi sebagai array<mixed> dalam komentar). Menggunakan anotasi PHPDoc di PHP 8.0+ dapat memberikan petunjuk tipe di IDE.

Bagaimana cara mengubah nama kelas root dan namespace?

Ada tombol Settings di kanan atas toolbar, klik untuk membuka dialog pengaturan, Anda dapat mengatur: ① Nama kelas root (default JsonRootClass); ② Namespace (default App\Models). Setelah perubahan, semua nama kelas yang dihasilkan akan diperbarui secara sinkron, struktur direktori dalam ZIP juga akan diatur menurut namespace (mis. App/Models/User.php).

Apakah unduhan berupa file .php tunggal atau paket ZIP?

Unduhan berupa paket ZIP (User.zip) yang berisi semua kelas PHP yang dihasilkan, diatur menurut struktur direktori sesuai jalur namespace. Misalnya namespace adalah App\Models, struktur file dalam ZIP adalah: App/Models/User.php, App/Models/Address.php, App/Models/Company.php dll. Dapat langsung diimpor ke direktori src proyek Composer dengan perintah unzip atau IDE.

Bisakah menyalin kelas tunggal langsung ke IDE?

Ya. Setiap kelas PHP yang dihasilkan ditampilkan sebagai kartu mandiri, ada tombol 'Salin' di pojok kanan atas kartu. Klik untuk menyalin kode lengkap seluruh kelas (termasuk <?php + namespace + use + class + properti + constructor + metode) ke clipboard, dapat langsung ditempel ke IDE seperti PhpStorm / VS Code / Sublime.

Bagaimana cara membuat kelas yang dihasilkan mengimplementasikan antarmuka JsonSerializable?

Diaktifkan secara default. Semua kelas PHP yang dihasilkan otomatis mengimplementasikan \JsonSerializable, menghasilkan metode public function jsonSerialize(): array { return [...] }. Array yang dikembalikan disusun menurut urutan properti kelas. Anda dapat langsung mengeluarkan string JSON dengan echo json_encode($user), dan di Laravel dapat menggunakan return response()->json($user).

Bisakah Symfony Serializer menggunakan kelas yang dihasilkan oleh alat ini?

Ya. Symfony Serializer secara default membaca data dalam gaya array, kompatibel dengan baik dengan kelas yang dihasilkan dalam gaya ArrayObject. Dapat langsung diserialisasi dengan $serializer->serialize($user, 'json) dari SerializerInterface; deserialisasi dengan deserialize() memerlukan properti publik atau metode getter di kelas. Yang dihasilkan alat ini adalah gaya penetapan constructor + properti publik, dapat langsung digunakan dengan PropertyNormalizer dari Symfony Serializer.

Apa yang harus dilakukan jika ada kesalahan format JSON?

Alat secara otomatis mendeteksi validitas JSON, saat terjadi kesalahan akan menampilkan pesan kesalahan merah di sebelah kanan dan menyediakan tombol 'Perbaiki JSON'. Klik untuk memperbaiki kesalahan umum secara otomatis: ① Koma berlebih di akhir; ② Mengganti tanda kutip tunggal menjadi tanda kutip ganda; ③ Melengkapi tanda kutip untuk kunci tanpa tanda kutip; ④ Menghapus komentar. Setelah perbaikan berhasil, dapat langsung mengonversi dan menghasilkan kelas PHP.

Apakah data diunggah ke server? Apakah privasi aman?

Berjalan sepenuhnya secara lokal di browser. Semua parsing JSON, pembuatan kelas PHP, pengemasan ZIP diselesaikan oleh JavaScript (quicktype-core + JSZip) di dalam browser, data JSON yang dimasukkan dan kode PHP yang dihasilkan tidak diunggah ke server mana pun, juga tidak dicatat atau dicache di cloud. JSON sensitif yang berisi field antarmuka internal, struktur bisnis yang belum dirilis, respons API non-publik dapat digunakan dengan aman, semua data dihapus saat halaman ditutup.

Apakah halaman menjadi lambat saat menghasilkan JSON besar dengan 10.000 baris?

Alat tidak memiliki batasan baris eksplisit, tetapi parsing dan rendering JSON yang sangat besar oleh browser akan melambat. Rekomendasi: ① Bagi JSON menjadi beberapa bagian untuk konversi batch; ② Fokus pada satu level bersarang pada satu waktu; ③ Jika perlu menghasilkan 100+ kelas sekaligus, disarankan langsung menggunakan plugin templat PHP IDE atau menulis skrip CLI quicktype sederhana.

Apakah kelas PHP yang dihasilkan mendukung versi di bawah PHP 7.4?

Tidak sepenuhnya mendukung. Kelas yang dihasilkan alat ini menggunakan typed properties PHP 7.4+ secara default (seperti public int $id). Jika proyek masih PHP 7.0~7.3, deklarasi tipe akan menyebabkan masalah kompatibilitas. Rekomendasi: ① Upgrade proyek ke PHP 8.1+ (direkomendasikan, kinerja dan sistem tipe lebih baik); ② Atau hapus deklarasi tipe secara batch di IDE setelah pembuatan (cari dan ganti `public int ` → `public `); ③ Atau gunakan mode kompatibel PHP 7.4 (alat ini menggunakan PHP 7.4 sebagai batas bawah secara default).

Pemecahan Masalah

Menampilkan 'Masukkan data JSON' atau sisi kanan kosong

Area input di sebelah kiri kosong atau hanya berisi spasi putih. Pastikan Anda telah menempelkan konten JSON yang valid, atau klik 'Sample' untuk memuat contoh dalam bahasa Indonesia, atau klik 'Upload' untuk memilih file .json / .txt.

Menampilkan 'Unexpected token ... in JSON at position N'

Format JSON tidak valid. Penyebab umum: ① Koma berlebih di akhir (seperti {"a":1,}); ② Menggunakan tanda kutip tunggal sebagai pengganti tanda kutip ganda; ③ Menggunakan notasi objek JS ({key: value}) daripada JSON ({"key": "value"}). Klik tombol 'Perbaiki JSON' untuk memperbaiki beberapa kesalahan secara otomatis.

Error 'Typed property must not be accessed before initialization' di proyek PHP 7.x

Kelas yang dihasilkan alat ini menggunakan typed properties PHP 7.4+ secara default (seperti public int $id). Jika proyek masih PHP 7.0~7.3, deklarasi tipe akan menyebabkan masalah kompatibilitas. Solusi: ① Upgrade proyek ke PHP 8.1+ (direkomendasikan, kinerja dan sistem tipe lebih baik); ② Hapus deklarasi tipe secara batch di IDE setelah pembuatan (cari dan ganti `public int ` → `public `); ③ Hapus centang opsi 'PHP 7.4 typed properties' (hanya berlaku untuk beberapa gaya kode).

Error 'Cannot modify readonly property' di readonly class PHP 8.1

Properti yang dihasilkan dalam gaya readonly class tidak dapat diubah setelah konstruksi. Mencoba $user->name = 'Bob' akan menyebabkan error. Solusi: ① Ubah ke gaya ArrayObject atau stdClass (properti dapat diubah); ② Atau buat instance baru dengan new User(...) alih-alih memodifikasi.

Illuminate\Contracts\Support\Jsonable tidak ditemukan di proyek Laravel

Gaya integrasi Laravel memerlukan dependensi laravel/framework. Pastikan composer.json memiliki: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Kemudian jalankan composer update untuk menginstal dependensi. Jika tidak menggunakan Laravel, pilih gaya ArrayObject atau stdClass.

Deserialisasi Symfony Serializer gagal 'Cannot denormalize object'

Penyebab umum: ① Kelas yang dihasilkan tidak memiliki properti public atau metode getter (Symfony Serializer menggunakan PropertyNormalizer secara default); ② Kelas tidak memiliki constructor tanpa parameter tetapi memiliki parameter wajib. Solusi: ① Pastikan alat ini menghasilkan properti public; ② Bangun objek secara manual dengan metode statis fromArray() lalu berikan ke Serializer.

Nama kelas objek bersarang tidak sesuai harapan (mis. categories dinamai Categori)

Alat menggunakan aturan penamaan 'hapus huruf s di akhir + huruf kapital pertama' untuk objek dalam array; tidak ramah untuk bentuk jamak tidak beraturan seperti categories. Rekomendasi: ① Ubah kunci JSON sumber menjadi bentuk tunggal (mis. categories → category); ② Atau gunakan fitur ganti nama IDE setelah pembuatan untuk mengubah nama kelas (memperbaiki semua referensi secara bersamaan).

Struktur direktori setelah ekstraksi ZIP yang diunduh tidak benar

Direktori dalam ZIP diatur menurut pengaturan namespace (default App/Models/). Jika posisi setelah ekstraksi tidak benar: ① Ubah nama namespace (mis. menjadi App\Dto) dan unduh ulang; ② Tentukan direktori ekstraksi dengan unzip -d src/; ③ Atau langsung buka folder yang diekstrak dengan IDE.

Kelas yang dihasilkan tidak dapat di-autoload

Proyek Composer perlu mengatur pemetaan autoload PSR-4 di composer.json, mis: "autoload": { "psr-4": { "App\\": "src/" } }. Kemudian jalankan composer dump-autoload, Composer akan otomatis memuat file kelas dengan pemetaan namespace-direktori.

Akses nama field berubah setelah mengonversi snake_case ke camelCase

'Ubah ke camelCase' mengubah nama properti PHP (mis. user_name → userName), tetapi kunci array return dari metode jsonSerialize() mempertahankan snake_case asli, JSON yang dikeluarkan json_encode() tetap menggunakan nama field asli. Jadi saat mengakses properti PHP gunakan $user->userName, output JSON masih {"user_name": "..."}. Jika ingin mengakses dengan camelCase saat deserialisasi juga, perlu mengubah kunci di array return jsonSerialize() menjadi camelCase.

Halaman menjadi lambat saat menghasilkan 100+ kelas bersarang

Alat tidak memiliki batasan jumlah kelas eksplisit, tetapi kinerja browser saat merender DOM yang sangat besar akan menurun secara signifikan. Rekomendasi: ① Bagi JSON menjadi beberapa modul mandiri untuk konversi terpisah; ② Atau langsung gunakan alat pembuatan kode bawaan IDE (seperti plugin JSON to PHP PhpStorm); ③ Disarankan level bersarang tidak melebihi 6 lapisan, jika melebihi disarankan merefaktor struktur JSON.

Array bertipe numerik tetapi menghasilkan array<int> bukan array<float>

Alat menyimpulkan tipe dari elemen pertama array (mis. [1, 2, 3] disimpulkan int, [1.5, 2.5] disimpulkan float). Jika mencampur integer dan float (mis. [1, 2.5]), alat akan menyimpulkan dari elemen pertama. Solusi: ① Tambahkan setidaknya satu elemen float sampel ke JSON sumber (mis. [0.0, 1.5]); ② Atau sesuaikan tipe anotasi PHPDoc secara manual setelah pembuatan.

Field bernilai null menghasilkan tipe ?mixed bukan ?string

Nilai JSON null tidak dapat menentukan tipe sebenarnya, sehingga alat secara default menyimpulkannya sebagai tipe ?mixed. Ini adalah cara aman untuk menghindari kesalahan penentuan. Jika tipe sudah diketahui, berikan nilai sampel pada field tersebut di JSON sumber (mis. "field": "" akan menyimpulkan string), ubah tipe menjadi ?string setelah pembuatan.

Kelas masih tidak dapat di-autoload setelah composer dump-autoload

Kemungkinan penyebab: ① Namespace tidak sesuai dengan direktori (mis. namespace App\Models tetapi file berada di src/Dto/); ② Pemetaan psr-4 di composer.json salah (mis. "App\\": "src/Dto/" seharusnya "App\\Dto\\": "src/Dto/"). Solusi: Pastikan namespace setiap file .php sesuai dengan jalur direktori secara ketat (segmen namespace sama dengan segmen direktori, peka huruf besar-kecil).

PHPStan melaporkan 'Property does not have default value'

Properti bertipe yang dihasilkan tidak memiliki nilai default, sehingga PHPStan dalam mode --level=8 menganggapnya berpotensi tidak diinisialisasi. Solusi: ① Nonaktifkan strict rules PHPStan; ② Tetapkan nilai kosong di constructor (mis. $this->tags = []); ③ Gunakan gaya readonly class (segera ditetapkan setelah promosi constructor).

Deserialisasi array objek Symfony Serializer gagal

Untuk array objek seperti [{...},{...}], PropertyNormalizer memerlukan petunjuk tipe elemen. Solusi: ① Nyatakan tipe array<User> di PHPDoc; ② Atau bungkus dengan ArrayCollection ($users = new ArrayCollection()).

Kunci berbahasa China menghasilkan nama properti PHP yang berisi karakter khusus

Jika JSON sumber berisi kunci berbahasa China (mis. "姓名": "Alice"), alat akan menghasilkan properti public string $姓名, IDE mungkin memberi peringatan pelanggaran konvensi penamaan tetapi tidak akan menyebabkan error. Rekomendasi: ① Ubah kunci JSON menjadi bahasa Inggris (lebih sesuai dengan konvensi penamaan PHP PSR-1); ② Jika tetap menggunakan bahasa China, pastikan encoding file PHP adalah UTF-8 (PHP default UTF-8).

Urutan output $obj['key'] dan $obj->key tidak konsisten dalam gaya ArrayObject

Akses array gaya ArrayObject mengembalikan menurut urutan deklarasi properti, akses objek mengembalikan menurut urutan array return dari metode jsonSerialize(). Jika urutan keduanya tidak konsisten, output echo json_encode() akan berbeda dari var_dump($obj). Rekomendasi: Buat urutan return jsonSerialize() konsisten dengan urutan parameter constructor.

ID numerik dalam JSON callback WebHook melebihi PHP_INT_MAX

int PHP adalah integer bertanda 64-bit (nilai maksimum 9223372036854775807) pada sistem 64-bit; jika ID numerik JSON melebihi rentang ini (seperti ID snowflake Twitter) akan terpotong. Solusi: ① Terima ID sebagai tipe string ("id": "1234567890123456789"); ② Parsing dengan flag JSON_BIGINT_AS_STRING.

Glosarium

namespace
Mekanisme ruang nama yang diperkenalkan PHP 5.3+ untuk menghindari bentrokan nama kelas. Alat ini secara otomatis menghasilkan berdasarkan namespace yang ditetapkan pengguna, diatur di direktori App/Models/ dalam ZIP.
class
Templat untuk mendefinisikan objek di PHP. Yang dihasilkan alat ini adalah PHP class standar, dapat langsung diinstansiasi dengan new User(...).
ArrayObject
Kelas pustaka standar SPL PHP, mengimplementasikan antarmuka seperti ArrayAccess. Kelas yang dihasilkan gaya ArrayObject alat ini mewarisi \ArrayObject, mendukung akses gaya array dan objek.
stdClass
Kelas objek generik bawaan PHP, json_decode($json, false) mengembalikan tipe ini secara default. Kelas yang dihasilkan gaya stdClass alat ini mewarisi \stdClass, hanya mendukung akses gaya objek.
typed properties
Deklarasi tipe properti yang diperkenalkan PHP 7.4+ (seperti public int $id). Properti yang dihasilkan alat ini memiliki deklarasi tipe secara default, IDE dan alat analisis statis dapat langsung melakukan pengecekan tipe.
readonly class
Kelas readonly yang diperkenalkan PHP 8.1+, semua properti dalam kelas otomatis menjadi readonly dan tidak dapat diubah setelah konstruksi. Gaya readonly alat ini menghasilkan final readonly class, cocok untuk skenario DTO yang tidak dapat diubah.
JsonSerializable
Antarmuka yang diperkenalkan PHP 5.4+. Objek yang mengimplementasikan antarmuka ini akan secara otomatis memanggil metode jsonSerialize() saat json_encode(). Semua kelas alat ini secara otomatis mengimplementasikan antarmuka ini.
Jsonable (Laravel)
Antarmuka kontrak framework Laravel. Setelah diimplementasikan, objek dapat memanggil toJson() untuk mengeluarkan JSON. Gaya integrasi Laravel alat ini secara otomatis mengimplementasikan antarmuka ini.
Arrayable (Laravel)
Antarmuka kontrak framework Laravel. Setelah diimplementasikan, objek dapat memanggil toArray() untuk mengeluarkan array. Gaya integrasi Laravel alat ini secara otomatis mengimplementasikan antarmuka ini.
Composer
Alat manajemen dependensi resmi PHP. Untuk menggunakan kode yang dihasilkan alat ini, Anda perlu mengatur autoload PSR-4 di composer.json (mis. App\\: src/).
PSR-4
Standar autoload yang ditetapkan oleh PHP-FIG, memetakan namespace ke direktori untuk memuat file kelas. Paket ZIP yang dihasilkan alat ini diatur menurut jalur namespace, sesuai dengan standar PSR-4.
Symfony Serializer
Framework serialisasi komponen Symfony. Kelas yang dihasilkan gaya ArrayObject alat ini dapat digunakan dengan PropertyNormalizer Symfony Serializer untuk serialisasi dan deserialisasi terperinci.
Eloquent API Resource
Kelas API Resource Laravel Eloquent, digunakan untuk memformat respons API. Kelas yang dihasilkan gaya integrasi Laravel alat ini dapat langsung digunakan sebagai kelas dasar API Resource.
composer.json
File konfigurasi proyek Composer. Setelah menempatkan kode yang dihasilkan alat ini di direktori src, perlu mengatur bagian autoload di composer.json dan menjalankan composer dump-autoload.
json_encode / json_decode
Fungsi serialisasi dan deserialisasi JSON bawaan PHP. Ketika kelas yang dihasilkan alat ini mengimplementasikan JsonSerializable, json_encode() akan secara otomatis memanggil metode jsonSerialize().
PHPUnit DataProvider
Mekanisme penyedia data framework pengujian PHPUnit. Kelas PHP yang dihasilkan alat ini dapat diinjeksi ke kasus pengujian sebagai DataProvider, meningkatkan efisiensi penulisan pengujian dengan autocompletion IDE.
PHPStan
Alat analisis statis PHP, melakukan pengecekan tipe dan deteksi kesalahan pada kode. Kelas yang dihasilkan alat ini memiliki typed properties, dapat sepenuhnya menyimpulkan tipe properti dalam mode --level=8 PHPStan.
Psalm
Alat analisis statis PHP open-source lainnya oleh Vimeo. Kelas yang dihasilkan alat ini dapat melakukan verifikasi tipe kuat dengan PropertyTypeProvider Psalm.
Doctrine
Toolset ORM dan DBAL ekosistem PHP. Kelas PHP yang dihasilkan alat ini dapat digunakan sebagai kerangka Doctrine Entity, kemudian tambahkan anotasi seperti #[ORM\Column] secara manual.
php -l
Perintah pemeriksaan sintaks command line PHP. Kelas yang dihasilkan alat ini dapat menjalankan verifikasi sintaks dengan php -l User.php sebelum di-require ke proyek.
Composer dump-autoload
Perintah Composer untuk membuat ulang indeks autoload. Setelah menempatkan kelas yang dihasilkan alat ini di direktori src, perlu menjalankan composer dump-autoload agar diakui oleh autoload PSR-4.
JSON_THROW_ON_ERROR
Flag penanganan kesalahan json_decode() PHP 7.3+. Setelah diaktifkan, akan melempar pengecualian JsonException saat parsing JSON gagal. Contoh Laravel alat ini menggunakan parsing ketat.
Hash (PHP)
Fungsi hash bawaan PHP, sering digunakan untuk verifikasi tanda tangan WebHook. Kelas callback WebHook yang dihasilkan alat ini melakukan pemeriksaan tanda tangan bersama hash_hmac().

Tabel referensi pemetaan tipe JSON ke tipe PHP

Perbandingan tipe data JSON yang disimpulkan otomatis oleh alat dengan tipe PHP yang sesuai:

Contoh nilai JSONMetode deteksiTipe PHP yang dihasilkanNilai default properti
nullvalue === null?mixed / ?typenull
true / falsetypeof value === 'boolean'boolfalse
42typeof value === 'number' && Number.isInteger(value)int0
3.14typeof value === 'number' && !Number.isInteger(value)float0.0
"hello"typeof value === 'string'string''
[...] (array kosong)Array.isArray(value) && value.length === 0array (PHPDoc array<mixed>)[]
["a","b"]Array.isArray(value) && typeof value[0] === 'string'array (PHPDoc array<string>)[]
[1,2,3]Array.isArray(value) && typeof value[0] === 'number'array (PHPDoc array<int>)[]
[{...},{...}]Array.isArray(value) && typeof value[0] === 'object'array (PHPDoc array<Xxx>)[]
{...} (objek bersarang)typeof value === 'object' && !Array.isArray(value)Xxx (kelas mandiri)new Xxx()

Tabel perbandingan 4 gaya kode PHP

4 gaya kode kelas PHP yang didukung alat. Pilih sesuai kebutuhan proyek:

Gaya kodePewarisan / ModifierAntarmuka yang diimplementasikanSkenario aplikasi
Gaya ArrayObjectextends \ArrayObjectimplements \JsonSerializableEkosistem Symfony Serializer, butuh akses array $obj['key'], kompatibel pustaka standar PHP
Gaya stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, kompatibel perilaku default json_decode, pembawa data objek ringan
Gaya readonly classfinal readonly class (tanpa pewarisan)implements \JsonSerializablePHP 8.1+, DTO respons API, objek transfer data tidak dapat diubah, menjamin data tidak dimodifikasi setelah konstruksi
Gaya integrasi LaravelTanpa pewarisan (default)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, lapisan model Eloquent, pemformatan respons controller

Privacy & Security

Semua operasi analisis JSON, pembuatan kelas PHP, pembuatan paket ZIP dari alat JSON ke PHP ini dieksekusi sepenuhnya secara lokal di browser Anda melalui JavaScript (quicktype-core + JSZip); data JSON input dan kode PHP yang dihasilkan tidak diunggah ke server mana pun, juga tidak disimpan, dicache atau disimpan di cloud. JSON sensitif yang berisi field antarmuka internal, struktur bisnis yang belum dirilis, respons API non-publik dapat digunakan dengan aman; semua data dihapus saat halaman ditutup. Alat ini tidak menggunakan Cookie apa pun untuk pelacakan pengguna, tidak mengumpulkan informasi email atau akun, tidak mengintegrasikan skrip statistik pihak ketiga; semua perhitungan terjadi di proses browser perangkat saat ini. Bahkan dalam lingkungan offline (mis. terputus atau intranet terisolasi) berfungsi normal, asalkan sumber daya halaman telah dimuat sekali.

Authoritative References