logo
GeekFormat

JSON to PHP

Strumento gratuito online JSON to PHP, converte JSON in classi PHP eseguibili direttamente in un clic. Supporta due stili ArrayObject e stdClass, genera automaticamente namespace, typed properties (PHP 7.4+), readonly class opzionale (PHP 8.1+), implementa JsonSerializable, oggetti annidati divisi automaticamente in classi indipendenti, array convertiti automaticamente in array PHP, esecuzione locale nel browser senza download.

Raccomandazioni correlate

Informazioni su JSON to classe PHP e modellazione classi entità PHP

Lo strumento JSON to PHP (JSON to PHP Converter) è un'utilità che converte automaticamente strutture di dati JSON in codice classe PHP standard. Libera gli sviluppatori dal lavoro ripetitivo di scrivere manualmente namespace / class / proprietà public / costruttore, particolarmente adatto per convertire rapidamente JSON di esempio nella documentazione dell'interfaccia API in classi entità PHP che possono essere caricate direttamente in progetti Composer tramite require.

Questo strumento supporta 4 stili di codice principali: ① Stile ArrayObject (estende \ArrayObject, supporta accesso array e oggetto, comune nell'ecosistema Laravel / Symfony Serializer); ② Stile stdClass (estende \stdClass, solo accesso oggetto, comportamento predefinito WordPress / json_decode); ③ Stile readonly class (PHP 8.1+ final readonly class, immutabile dopo costruzione, adatto per DTO); ④ Stile integrazione Laravel (implementa Jsonable + Arrayable, funziona con Eloquent API Resource). Gli sviluppatori possono scegliere liberamente in base al framework utilizzato dal progetto.

Il mapping dei tipi PHP è il cuore di JSON to PHP. Lo strumento mappa i tipi di base JSON in tipi standard PHP: string mappa a string, intero a int, float a float, booleano a bool, array a array, oggetti annidati a classe indipendente (prima lettera nome campo maiuscola), null a ?type (proprietà nullable). Tutte le proprietà sono dichiarate con typed properties di PHP 7.4+, l'IDE può eseguire il controllo dei tipi direttamente.

Un altro punto forte differenziante è 'implementa automaticamente interfaccia JsonSerializable': ogni classe PHP generata da questo strumento implementa automaticamente \JsonSerializable e genera metodo public function jsonSerialize(): mixed { return [...] }. Ciò significa che puoi fare direttamente echo json_encode($user) per visualizzare stringa JSON, e json_encode chiamerà automaticamente i dati dell'array restituiti da jsonSerialize(). In Laravel con l'interfaccia Jsonable puoi anche fare direttamente return response()->json($user) senza alcuna elaborazione aggiuntiva.

A differenza di alcuni strumenti online che richiedono di caricare JSON sul server per l'elaborazione, tutti i calcoli di questo strumento vengono eseguiti nel browser. quicktype-core viene caricato ed eseguito tramite Web Worker; analisi JSON, inferenza tipi, generazione codice PHP, creazione pacchetto ZIP avvengono localmente, non inviano dati a nessun server. Ciò è particolarmente importante per JSON contenente chiavi API, campi di riservatezza utente o strutture business non rilasciate; i dati vengono cancellati dalla memoria dopo la chiusura della pagina.

Il codice generato deve generalmente essere posizionato nel progetto Composer per l'uso. Devi assicurarti che la versione PHP soddisfi i requisiti in composer.json (PHP 7.4+ supporta typed properties, PHP 8.1+ supporta readonly class), quindi copiare le classi generate nella directory src, caricamento automatico tramite namespace (PSR-4). Quindi puoi consumare dati con json_decode($jsonString, false) o json_decode($jsonString, true) + deserializzazione, godendo dei vantaggi del sistema di tipi PHP.

Casi d'uso

  • Sviluppo backend Laravel: convertire rapidamente JSON di esempio da documentazione interfaccia API in classi Eloquent Model / API Resource, serializzare risposte direttamente con interfacce Jsonable / Arrayable integrate di Laravel
  • Integrazione Symfony Serializer: convertire JSON restituito da API di terze parti in classi PHP stile ArrayObject, fare mapping oggetti profondo e validazione dati con Symfony Serializer
  • WordPress REST API: convertire struttura JSON restituita da endpoint personalizzati in classi PHP stile stdClass, output diretto con wp_send_json(), conforme al comportamento predefinito di wp_json_encode()
  • PHP 8.1+ readonly DTO: convertire JSON in final readonly class per Data Transfer Object (DTO), immutabili dopo costruzione, evitando che la logica di business modifichi accidentalmente i dati di risposta
  • Sviluppo pacchetti Composer: convertire JSON Schema in classi PHP quindi pubblicare su Packagist come strato modello SDK, in modo che altri progetti Composer lo richiedano e riutilizzino
  • Fixture test unitari: convertire fixture JSON in classi PHP quindi utilizzare json_decode + deserializzazione per test basati su dati, assertion di campi strutturati
  • Script migrazione dati: convertire file di configurazione JSON in classi PHP quindi utilizzarle per accesso fortemente tipizzato nella logica di business, più facile autocompletamento IDE e controllo tipi rispetto all'accesso array
  • Integrazione Frontend Mock: backend converte prima modelli JSON in classi PHP, frontend ottiene contemporaneamente l'interfaccia TypeScript / classe PHP corrispondente, mantenendo i tipi coerenti ad entrambe le estremità
  • Code review: convertire JSON restituito da API direttamente in classi PHP leggibili, facilitando discussione su denominazione campi, visibilità proprietà durante Code Review
  • Refactoring progetti legacy: refattorizzare codice di accesso dinamico basato su array associativo in accesso fortemente tipizzato basato su classe PHP, fare analisi statica con PHPStan / Psalm
  • PHPUnit DataProvider: convertire dati di test JSON in classi PHP quindi iniettare nel caso di test tramite DataProvider, l'IDE suggerisce automaticamente i campi delle proprietà
  • Integrazione API backend snake_case: API backend restituisce campi snake_case, il sistema PHP frontend attiva 'converti in camelCase' + stile ArrayObject per integrazione trasparente
  • Analisi statica PHPStan: le classi generate hanno naturalmente dichiarazioni di tipo, con phpstan analyse --level=8 intercettare errori di tipo in CI
  • Insegnamento e formazione: in scenari di insegnamento PHP, convertire JSON di esempio in classi PHP per dimostrare modellazione orientata agli oggetti, sistema di tipi, implementazione interfacce
  • Strato gateway API: convertire JSON restituito da microservizi a monte in classi PHP per aggregazione in strato gateway, i servizi PHP a valle consumano fortemente tipizzati tramite proprietà classe
  • Consumazione code di messaggi: convertire corpi di messaggi JSON consumati da RabbitMQ / Kafka in classi PHP quindi archiviare o inoltrare, analisi rigorosa con JSON_THROW_ON_ERROR
  • Modellazione SKU/SPU e-commerce: convertire struttura JSON prodotto (multi-specifica / multi-immagine / multi-attributo) in classi PHP, con stile ArrayObject fare ottimizzazione query N+1 in Laravel
  • Verifica firma callback WebHook: convertire struttura verifica firma JSON di gateway di pagamento, callback logistici in classi PHP, verifica firma con hash_hmac()
  • Toolchain OpenAPI: convertire schema JSON di OpenAPI 3.x in classi PHP, integrare con flusso di generazione client PHP di Swagger Codegen / Apifox
  • Pipeline ETL dati: convertire JSON da fonti di dati a monte (campo JSON MySQL / MongoDB / Elasticsearch) in classi PHP quindi pulizia dati e archiviazione

Come utilizzare

  1. Incolla oggetto JSON (consigliato) o array nell'editor a sinistra, o clicca su 'Sample' per caricare esempio in cinese (con address / company / tags annidati)
  2. Clicca sul pulsante 'Impostazioni' nella toolbar, nella finestra di dialogo seleziona: ① imposta nome classe radice (es. User) e namespace (es. App\Models); ② seleziona stile codice (ArrayObject / stdClass / readonly class); ③ seleziona funzionalità codice (typed properties / integrazione Laravel / Symfony Serializer); ④ seleziona strategia denominazione campi (mantieni originale / camelCase / tutto minuscolo / UPPER_SNAKE)
  3. Lo strumento convertirà automaticamente in 400ms, la destra mostra tutte le classi PHP generate (ogni classe una scheda separata, la barra del titolo mostra badge stile attuale in tempo reale); se JSON ha errori di formato verrà visualizzato pulsante 'Ripara JSON'
  4. Verifica che nomi di classe generati, nomi proprietà e interfacce soddisfino le aspettative; se è necessario un adattamento puoi modificare i nomi delle chiavi del JSON sorgente o riaprire Impostazioni per modificare le opzioni
  5. Quando soddisfatto puoi cliccare sul pulsante 'Copia' della classe singola per incollare nell'IDE, o cliccare su 'Download ZIP' nella toolbar per scaricare tutte le classi in un clic (struttura directory organizzata per percorso namespace)

Funzionalità

  • Due stili di codice commutabili liberamente: ArrayObject (estende \ArrayObject, supporta accesso stile array $obj['key']) / stdClass (estende \stdClass, supporta accesso stile oggetto $obj->key), compatibile con diversi scenari come serializzazione Laravel, WordPress REST, Symfony Serializer
  • Template PHP completo: genera automaticamente dichiarazione namespace + istruzioni use + commento intestazione classe (Copyright + timestamp generazione) + definizione classe + proprietà pubbliche tipizzate (PHP 7.4+), utilizzabile direttamente tramite require in progetto Composer senza completare manualmente il boilerplate
  • Interfaccia JsonSerializable implementata automaticamente: ogni classe generata crea automaticamente public function jsonSerialize(): mixed { return [...] }, serializza JSON direttamente con json_encode(), zero codice boilerplate aggiuntivo
  • readonly class PHP 8.1+ opzionale: all'attivazione, la classe generata aggiunge final readonly class, tutte le proprietà sono readonly, immutabili dopo costruzione, adatto a scenari DTO risposta API immutabili
  • Inferenza tipi intelligente: string → string, integer → int, float → float, bool → bool, array → array, oggetti annidati → classe indipendente, null → ?type (proprietà nullable), senza specificazione manuale dei tipi di campo
  • Classi annidate divise automaticamente: oggetti annidati generano classi PHP indipendenti con prima lettera nome campo maiuscola (es. address → Address), oggetti in array nominati secondo regola 'rimuovi s finale' (es. users → User), tutte le classi annidate implementano anche JsonSerializable
  • 4 strategie denominazione campi: mantieni originale / snake_case a camelCase (user_name → userName) / tutto minuscolo / stile costanti UPPER_SNAKE, conformi a diversi standard di codifica PSR-1 / Laravel / Symfony
  • Integrazione Laravel in un clic: all'attivazione, implementa automaticamente interfacce Jsonable, Arrayable, aggiunge metodi toArray() / toJson(), utilizzabile direttamente come Eloquent API Resource, con autoload Composer
  • Copia classe singola + download ZIP multi-file: ogni classe PHP ha pulsante 'Copia' separato, può scaricare in un clic pacchetto ZIP organizzato per struttura directory namespace (es. App/Models/User.php), decomprimere e utilizzare
  • Esecuzione locale nel browser + cronologia: analisi JSON, generazione classi PHP, creazione pacchetto ZIP tramite JavaScript (quicktype-core + JSZip) nel browser, dati non caricati su server; cronologia localStorage integrata per 200 voci recenti

Esempi di codice

PHP: Serializzare classi generate da questo strumento con json_encode()

php

Le classi PHP generate da questo strumento implementano l'interfaccia JsonSerializable per impostazione predefinita, restituiscono JSON direttamente con json_encode() senza alcuna elaborazione aggiuntiva.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// Simula stringa JSON ricevuta da API
$jsonString = '{"id":1,"name":"Alice","email":"a****@***********","isActive":true}';

// 1) Deserializza in classe generata da questo strumento
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) Accesso ai campi fortemente tipizzato (autocompletamento IDE + controllo statico PHPStan)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? 'Attivo' : 'Disattivato'; // Attivo

// 3) json_encode() chiama automaticamente jsonSerialize(), nessun codice aggiuntivo necessario
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "isActive": true
}
*/

PHP: Esempio di integrazione Laravel API Resource

php

Dopo aver abilitato l'integrazione Laravel, le classi generate da questo strumento possono essere utilizzate direttamente come Eloquent API Resource, formattando le risposte con 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) 从数据库或外部 API 获取数据
        $userData = $this->fetchUserFromApi($id);

        // 2) 用本工具生成的 User 类包装
        $user = new User(
            $userData['id'],
            $userData['name'],
            $userData['email'],
            $userData['isActive']
        );

        // 3) 直接 return response()->json($user)
        //    Laravel 会自动调用 jsonSerialize()
        return response()->json($user);
    }

    /**
     * POST /api/users
     */
    public function store(Request $request): JsonResponse
    {
        // 4) 反向用法:把请求 JSON 反序列化为 User 类
        $user = User::fromArray($request->all());

        // 5) 用 toArray() 获取数组形式
        $payload = $user->toArray();

        // 6) 执行业务逻辑(如入库 / 调用第三方 API)
        $this->userService->create($payload);

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

/*
 * 对应 composer.json 依赖:
 * "require": {
 *     "php": "^8.1",
 *     "laravel/framework": "^11.0"
 * }
 */

PHP: Esempio di integrazione Symfony Serializer

php

Le classi generate in stile ArrayObject da questo strumento possono funzionare con il componente Symfony Serializer per serializzazione e deserializzazione profonda, adatte a livelli di gateway API complessi.

<?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)
    {
        // 使用 PropertyNormalizer 处理 public 属性
        $this->serializer = $serializer;
    }

    /**
     * 将 User 对象序列化为 JSON 字符串
     */
    public function toJson(User $user): string
    {
        return $this->serializer->serialize($user, 'json');
    }

    /**
     * 将 JSON 字符串反序列化为 User 对象
     */
    public function fromJson(string $json): User
    {
        return $this->serializer->deserialize($json, User::class, 'json');
    }

    /**
     * 批量反序列化(如从 MongoDB 导出的 JSON 数组)
     */
    public function fromJsonArray(string $jsonArray): array
    {
        $users = [];
        $data = json_decode($jsonArray, true);

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

        return $users;
    }
}

// 使用示例
$serializer = new UserSerializer($serializerService);

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

// 反序列化为本工具生成的 User 对象
$user = $serializer->fromJson($json);
echo $user->name;                  // Alice
echo $user->address->city;         // Beijing (强类型访问)
print_r($user->tags);              // ['php', 'symfony']

// 序列化回 JSON
$jsonOutput = $serializer->toJson($user);

Best Practices

Per la maggior parte dei progetti backend PHP, le classi generate in stile ArrayObject supportano sia l'accesso array ($obj['key']) che l'accesso oggetto ($obj->key); con l'interfaccia JsonSerializable implementata per impostazione predefinita, json_encode() chiama automaticamente l'array restituito da jsonSerialize(). Questo è il pattern di trasporto dati oggetto più universale nell'ecosistema PHP, compatibile con quasi tutti i framework mainstream come Laravel, Symfony, CodeIgniter.

La classe readonly introdotta in PHP 8.1+ è la migliore pratica per i DTO: proprietà immutabili dopo la costruzione, impedendo alla logica di business di modificare accidentalmente i dati di risposta; la promozione del costruttore rende il codice più conciso (public function __construct(public int $id, public string $name) {} una riga per le dichiarazioni di proprietà). Consigliamo di convertire i DTO di risposta API, le strutture di callback WebHook, i modelli client API di terze parti allo stile readonly class.

I campi del database Laravel sono per impostazione predefinita snake_case, ma le proprietà PHP consigliano camelCase. La strategia 'Converti in camelCase' di questo strumento converte automaticamente, mentre le chiavi dell'array return di jsonSerialize() mantengono lo snake_case originale; l'output json_encode() rimane snake_case. Questo rispetta sia le abitudini di accesso al modello Laravel che mantiene la compatibilità API.

I pacchetti ZIP generati sono organizzati per percorso namespace (es. App/Models/User.php). Configura la sezione autoload.psr-4 in composer.json, ad esempio: "App\\": "src/", poi esegui composer dump-autoload. In questo modo Composer mapperà automaticamente App\Models\User a src/Models/User.php senza require manuali.

Questo strumento genera per impostazione predefinita proprietà tipizzate (PHP 7.4+), i cui tipi di proprietà possono essere completamente dedotti da PHPStan in modalità --level=8. Consigliamo di integrare phpstan analyse ./src --level=8 nella pipeline CI per intercettare gli errori di tipo. Psalm supporta anche PropertyTypeProvider per una validazione di tipo forte.

Questo strumento viene eseguito completamente localmente nel browser e non carica alcun dato. Ma prendi l'abitudine: ① desensibilizza i JSON contenenti chiavi API / token / privacy utente prima della conversione; ② assicurati che la connessione di rete sia disconnessa quando usi questo strumento per grandi strutture di business interne (interfacce non rilasciate); ③ non commettere dati di esempio con informazioni sensibili in repository pubblici dopo la generazione del codice.

Gli oggetti JSON annidati generano ricorsivamente classi PHP indipendenti. Se i livelli di annidamento JSON superano i 6 livelli (es. menu annidati multilivello, organigrammi, documenti aziendali complessi), il numero di classi generate esplode (N classi annidate per livello), l'IDE si carica lentamente e la manutenzione diventa difficile. Raccomandazioni: ① dividi JSON in più moduli e converti separatamente; ② o dopo la generazione rifattorizza manualmente in indicizzazione array ($user['profile']['address']['city']) invece dell'annidamento di classi.

I valori null JSON sono dedotti per impostazione predefinita come ?mixed (mixed nullable), che è un fallback sicuro ma non un tipo preciso. Se il tipo di campo è noto (es. "nickname": "" deduce string), fornisci prima un valore di esempio nel JSON sorgente, dopo la generazione rimuovi il valore di esempio e cambia in un tipo preciso come ?string, migliorando significativamente la precisione dell'analisi statica PHPStan.

Domande frequenti

Come convertire JSON in classe PHP?

Incolla contenuto JSON nell'area di input a sinistra, lo strumento convertirà automaticamente in 400ms; oppure clicca sul pulsante 'Convert' nella toolbar. Dopo la conversione, la destra mostra tutte le classi PHP generate, ogni classe ha pulsante 'Copia' separato; clicca 'Download ZIP' nella toolbar per impacchettare e scaricare tutte le classi in un clic (inclusa struttura directory namespace).

Quali strutture di dati JSON sono supportate?

Supporta due strutture: ① Oggetto JSON (come classe radice, genera automaticamente class RootClass); ② Array JSON (primo oggetto dell'array come modello classe radice). Tutti gli oggetti annidati vengono elaborati ricorsivamente in classi indipendenti; gli oggetti negli array vengono elaborati ricorsivamente in classi corrispondenti al tipo elemento dell'array.

Cosa contengono le classi PHP generate?

Ogni file .php generato contiene: ① commento intestazione file (Copyright + timestamp generato automaticamente); ② dichiarazione namespace; ③ istruzioni use (incluse \JsonSerializable / \ArrayAccess ecc. importate automaticamente in base alle necessità); ④ definizione classe (ArrayObject / stdClass / readonly class in base alle impostazioni); ⑤ implementazioni interfacce (JsonSerializable / Jsonable / Arrayable in base alle impostazioni); ⑥ proprietà pubbliche tipizzate (PHP 7.4+); ⑦ costruttore (assegnazione di tutte le proprietà generata in base alle impostazioni); ⑧ metodi jsonSerialize() / toArray() / toJson() ecc. Completamente pronti per controllo sintassi php -l e utilizzo tramite require.

Qual è la differenza tra stili ArrayObject e stdClass?

Stile ArrayObject: classe generata estende \ArrayObject, supporta sia accesso stile array $obj['key'] sia accesso stile oggetto $obj->key, restituisce oggetto durante json_encode(). Stile stdClass: classe generata estende \stdClass, supporta solo accesso stile oggetto $obj->key, più leggera ma senza accesso diretto agli array. L'ecosistema Laravel/WordPress utilizza stile stdClass per impostazione predefinita (comportamento predefinito di json_decode), Symfony Serializer utilizza stile ArrayObject per impostazione predefinita.

Supporta la generazione di Laravel API Resource?

Sì. Dopo aver attivato l'opzione 'Integrazione Laravel in un clic' nelle impostazioni, lo strumento genera automaticamente interfacce Jsonable, Arrayable implementate, aggiunge metodi toJson($options = 0) e toArray(), le classi generate possono essere utilizzate direttamente in Eloquent API Resource (come new UserResource($user) o $user->toArray()). Utilizza anche automaticamente Illuminate\Contracts\Support\Jsonable e Illuminate\Contracts\Support\Arrayable.

Che aspetto ha il codice generato in modalità PHP 8.1 readonly class?

Dopo aver attivato readonly class, le classi PHP generate vengono semplificate in modo significativo. Ad esempio, class User con readonly attivato ha circa 12 righe: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Tutte le proprietà sono dichiarate readonly tramite promozione proprietà costruttore (constructor property promotion), immutabili dopo costruzione. Nota: il progetto richiede PHP 8.1+, i campi readonly possono essere assegnati solo tramite costruttore.

Come convertire nomi di campo snake_case in camelCase?

Nel gruppo 'Strategia denominazione campi' della finestra di dialogo Impostazioni, seleziona modalità 'Converti in camelCase', lo strumento convertirà automaticamente nomi di campo JSON da snake_case allo stile di denominazione consigliato da PHP. Ad esempio user_name → userName, created_at → createdAt, is_active → isActive. Inoltre, se JSON proviene da binding route Laravel, le proprietà della classe sono accessibili direttamente tramite $request->userName senza conversione intermedia manuale.

Come vengono elaborati gli oggetti JSON annidati?

Lo strumento crea automaticamente classi PHP indipendenti per oggetti annidati. Regola denominazione: chiave oggetto annidato con prima lettera maiuscola come nome classe (es. address → Address), chiave oggetto in array rimuovendo s finale poi prima lettera maiuscola (es. users → User). Tutte le classi annidate includono anche campi completi, costruttore, metodo jsonSerialize(), namespace coerente con classe radice, possono essere importate tramite use App\Models\Address.

I campi array vengono convertiti automaticamente?

Sì. I campi array in JSON vengono convertiti automaticamente in proprietà PHP array, tipo elemento dedotto automaticamente dal primo elemento dell'array. Ad esempio ["a","b","c"] → array (annotato come array<string> nel commento); [{...},{...}] → array (annotato come array<User> nel commento, User è nuova classe nominata dalla chiave); array vuoto [] per impostazione predefinita array (annotato come array<mixed> nel commento). PHP 8.0+ con annotazioni PHPDoc può ottenere suggerimenti di tipo nell'IDE.

Come modificare nome classe radice e namespace?

C'è un pulsante Impostazioni nell'angolo superiore destro della toolbar, clicca per aprire finestra di dialogo configurazione, puoi configurare: ① nome classe radice (predefinito JsonRootClass); ② namespace (predefinito App\Models). Dopo la modifica, tutti i nomi di classe generati vengono aggiornati in modo sincrono, la struttura directory nel ZIP è organizzata anche per namespace (es. App/Models/User.php).

Il download è un singolo file .php o pacchetto ZIP?

Il download è pacchetto ZIP (User.zip), contiene tutte le classi PHP generate, organizzate in struttura directory per percorso namespace. Ad esempio quando namespace è App\Models, la struttura file nel ZIP è: App/Models/User.php, App/Models/Address.php, App/Models/Company.php ecc. Può essere importato direttamente nella directory src del progetto Composer tramite comando unzip o IDE.

Posso copiare una classe singola direttamente nell'IDE?

Sì. Ogni classe PHP generata viene visualizzata come scheda separata, l'angolo superiore destro della scheda ha pulsante 'Copia', cliccando tutto il codice completo della classe (incluso <?php + namespace + use + classe + proprietà + costruttore + metodi) viene copiato negli appunti, può essere incollato direttamente in IDE come PhpStorm / VS Code / Sublime.

Come fare in modo che le classi generate implementino l'interfaccia JsonSerializable?

Attivato per impostazione predefinita. Tutte le classi PHP generate implementano automaticamente \JsonSerializable e generano metodo public function jsonSerialize(): array { return [...] }, array restituito assemblato nell'ordine delle proprietà della classe. Puoi fare direttamente echo json_encode($user) per visualizzare stringa JSON, o in Laravel return response()->json($user).

Symfony Serializer può utilizzare le classi generate da questo strumento?

Sì. Symfony Serializer legge i dati in stile array per impostazione predefinita, ben compatibile con classi generate in stile ArrayObject. Con $serializer->serialize($user, 'json') di SerializerInterface può serializzare direttamente; durante la deserializzazione con deserialize() la classe necessita di proprietà pubbliche o getter. Questo strumento genera stile proprietà pubbliche + assegnazione da costruttore, può essere utilizzato direttamente con PropertyNormalizer di Symfony Serializer.

Cosa fare se JSON ha errori di formato?

Lo strumento rileva automaticamente la validità JSON, in caso di errore visualizza avviso errore rosso a destra e fornisce pulsante 'Ripara JSON'. Cliccando può riparare automaticamente errori comuni: ① virgole finali superflue; ② virgolette singole sostituite da virgolette doppie; ③ completamento virgolette per chiavi senza virgolette; ④ rimozione commenti. Dopo la riparazione riuscita può convertire direttamente per generare classi PHP.

I dati vengono caricati su server? È privato e sicuro?

Esecuzione completamente locale nel browser. Tutta l'analisi JSON, generazione classi PHP, creazione pacchetto ZIP avvengono nel tuo browser tramite JavaScript (quicktype-core + JSZip), i dati JSON di input e il codice PHP generato non vengono caricati su nessun server, né salvati o messi in cache nel cloud. JSON sensibile contenente campi interfaccia interni, strutture business non rilasciate, risposte API non pubbliche può essere utilizzato in sicurezza, cancellato alla chiusura della pagina.

Generare un JSON grande di 10.000 righe causerà rallentamenti?

Lo strumento non ha un limite esplicito di righe, ma l'analisi e il rendering di JSON molto grande da parte del browser saranno più lenti. Consigli: ① dividere JSON e convertire per lotti; ② concentrarsi su un livello di annidamento alla volta; ③ se è necessario generare per lotti 100+ classi, consigliamo di utilizzare direttamente plugin modello PHP dell'IDE o scrivere uno script CLI quicktype semplice.

Le classi PHP generate supportano versioni precedenti a PHP 7.4?

Non completamente. Le classi generate da questo strumento utilizzano per impostazione predefinita typed properties di PHP 7.4+ (es. public int $id). Se il tuo progetto è ancora PHP 7.0~7.3, le dichiarazioni di tipo causeranno problemi di compatibilità. Consigli: ① aggiornare progetto a PHP 8.1+ (consigliato, prestazioni migliori e sistema di tipi); ② o eliminare dichiarazioni di tipo per lotti nell'IDE dopo generazione (Find & Replace `public int ` → `public `); ③ o utilizzare modalità compatibile PHP 7.4 (PHP 7.4 è la linea base di questo strumento).

Risoluzione dei problemi

Mostra 'Inserisci dati JSON' o destra vuota

L'area di input a sinistra è vuota o contiene solo spazi bianchi. Assicurati di aver incollato contenuto JSON valido, o clicca su 'Sample' per caricare esempio in cinese, o clicca su 'Upload' per selezionare file .json / .txt.

Mostra 'Unexpected token ... in JSON alla posizione N'

Formato JSON non valido. Cause comuni: ① virgola extra alla fine (es. {"a":1,}); ② virgolette singole usate al posto di virgolette doppie; ③ notazione oggetto JS (es. {key: value}) invece di JSON (es. {"key": "value"}). Clicca sul pulsante 'Ripara JSON' per correggere automaticamente alcuni errori.

Codice generato errore in progetto PHP 7.x con 'Typed property must not be accessed before initialization'

Le classi generate da questo strumento usano per impostazione predefinita proprietà tipizzate PHP 7.4+ (es. public int $id). Se il tuo progetto è ancora PHP 7.0~7.3, le dichiarazioni di tipo causano problemi di compatibilità. Soluzioni: ① aggiorna il progetto a PHP 8.1+ (consigliato, prestazioni migliori e sistema di tipi); ② rimuovi in batch le dichiarazioni di tipo nell'IDE (Cerca & Sostituisci `public int ` → `public `); ③ deseleziona l'opzione 'Proprietà tipizzate PHP 7.4' (efficace solo per alcuni stili di codice).

Classe readonly PHP 8.1 errore 'Cannot modify readonly property'

Le proprietà generate in stile readonly class non possono essere modificate dopo la costruzione. Se provi $user->name = 'Bob' si verificherà un errore. Soluzioni: ① passa allo stile ArrayObject o stdClass (proprietà modificabili); ② o crea una nuova istanza con new User(...) invece di modificare.

Impossibile trovare Illuminate\Contracts\Support\Jsonable nel progetto Laravel

Lo stile di integrazione Laravel richiede la dipendenza laravel/framework. Assicurati in composer.json di avere: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Poi esegui composer update per installare le dipendenze. Se non usi Laravel, scegli lo stile ArrayObject o stdClass.

Deserializzazione Symfony Serializer fallita 'Cannot denormalize object'

Cause comuni: ① la classe generata non ha proprietà pubbliche o metodi getter (Symfony Serializer usa PropertyNormalizer per impostazione predefinita); ② la classe manca di costruttore senza parametri ma ha parametri obbligatori. Soluzioni: ① conferma che questo strumento ha generato proprietà pubbliche; ② costruisci manualmente l'oggetto tramite il metodo statico fromArray() poi passalo al Serializer.

Nome classe oggetto annidato non atteso (es. categories denominato Categori)

Lo strumento usa la regola di denominazione 'rimuovi s finale + maiuscola' per gli oggetti negli array; per plurali irregolari come categories non è accurato. Raccomandazioni: ① cambia la chiave JSON sorgente in singolare (es. categories → category); ② o dopo la generazione usa Rinomina dell'IDE per rinominare la classe (modificando tutti i riferimenti contemporaneamente).

Struttura directory ZIP scaricato errata dopo estrazione

Le directory all'interno dello ZIP sono organizzate secondo l'impostazione namespace (predefinito App/Models/). Se posizione errata dopo estrazione: ① modifica il nome namespace (es. in App\Dto) e scarica nuovamente; ② specifica directory di estrazione con unzip -d src/; ③ o direttamente nell'IDE File → Apri l'intera cartella estratta.

Classi generate non si caricano automaticamente

I progetti Composer richiedono la configurazione del mapping autoload PSR-4 in composer.json, ad esempio: "autoload": { "psr-4": { "App\\": "src/" } }. Poi esegui composer dump-autoload; Composer caricherà automaticamente i file di classe tramite mapping namespace-a-directory.

Nome campo cambiato dopo conversione snake_case in camelCase

'Converti in camelCase' cambia i nomi delle proprietà PHP (es. user_name → userName), ma le chiavi dell'array return nel metodo jsonSerialize() mantengono lo snake_case originale; il JSON generato da json_encode() ha ancora i nomi di campo originali. Quindi per accedere alla proprietà PHP usa $user->userName, l'output JSON è ancora {"user_name": "..."}. Se vuoi anche l'accesso camelCase durante la deserializzazione, devi cambiare le chiavi in camelCase nell'array return di jsonSerialize().

Pagina rallenta durante la generazione di 100+ classi annidate

Lo strumento non ha un limite esplicito di numero di classi, ma le prestazioni di rendering DOM molto grande del browser diminuiscono significativamente. Raccomandazioni: ① dividi JSON in più moduli indipendenti e converti separatamente; ② o usa direttamente gli strumenti di generazione codice integrati nell'IDE (es. plugin JSON to PHP di PhpStorm); ③ i livelli di annidamento non dovrebbero superare i 6 livelli, altrimenti consigliamo di rifattorizzare la struttura JSON.

Array è di tipo numerico ma genera array<int> invece di array<float>

Lo strumento deduce il tipo in base al primo elemento dell'array (es. [1, 2, 3] deduce int, [1.5, 2.5] deduce float). Se mescoli interi e float (es. [1, 2.5]), lo strumento dedurrà in base al primo elemento. Soluzioni: ① aggiungi almeno un elemento float di esempio nel JSON sorgente (es. [0.0, 1.5]); ② o regola manualmente il tipo nell'annotazione PHPDoc dopo la generazione.

Campo valore null generato come tipo ?mixed invece di ?string

I valori null JSON sono dedotti per impostazione predefinita come tipo ?mixed dallo strumento (perché il tipo reale non può essere determinato). Questa è una pratica sicura per evitare errori di valutazione. Se il tipo è noto, dai a questo campo un valore di esempio nel JSON sorgente (es. "field": "" deduce string), dopo la generazione cambia il tipo in ?string.

Dopo composer dump-autoload la classe ancora non si carica automaticamente

Possibili cause: ① namespace non corrisponde alla directory (es. namespace App\Models ma file in src/Dto/); ② il mapping psr-4 di composer.json è scritto male (es. "App\\": "src/Dto/" dovrebbe essere "App\\Dto\\": "src/Dto/"). Soluzioni: verifica che il namespace di ogni file .php corrisponda strettamente al percorso della directory (i segmenti namespace devono essere uguali ai segmenti directory, con distinzione tra maiuscole e minuscole).

PHPStan segnala 'Property does not have default value'

Le proprietà tipizzate generate non hanno valori predefiniti; PHPStan in modalità --level=8 le considera potenzialmente non inizializzate. Soluzioni: ① disattiva le regole severe di PHPStan; ② assegna valori vuoti nel costruttore (es. $this->tags = []); ③ usa lo stile readonly class (assegnato immediatamente dopo la promozione del costruttore).

Deserializzazione array di oggetti Symfony Serializer fallita

Per array di oggetti come [{...},{...}], PropertyNormalizer necessita di suggerimenti sul tipo di elemento. Soluzioni: ① specifica esplicitamente il tipo array<User> in PHPDoc; ② o avvolgi con ArrayCollection ($users = new ArrayCollection()).

Chiavi cinesi generano nomi di proprietà PHP con caratteri speciali

Quando il JSON sorgente contiene chiavi cinesi (es. "姓名": "Alice"), lo strumento genererà una proprietà public string $姓名; l'IDE potrebbe segnalare che la denominazione non è standard ma non si verificherà alcun errore. Raccomandazioni: ① cambia le chiavi JSON in inglese (più conforme alla convenzione di denominazione PHP PSR-1); ② mantenendo il cinese assicurati che la codifica del file PHP sia UTF-8 (PHP è UTF-8 per impostazione predefinita).

Stile ArrayObject $obj['key'] vs $obj->key ordine di output incoerente

L'accesso array in stile ArrayObject restituisce nell'ordine di dichiarazione della proprietà, l'accesso oggetto restituisce nell'ordine dell'array return nel metodo jsonSerialize(). Se i due ordini sono incoerenti, l'output di echo json_encode() sarà incoerente con var_dump($obj). Raccomandazione: mantieni l'ordine return di jsonSerialize() coerente con l'ordine dei parametri del costruttore.

ID numerico in JSON callback WebHook supera PHP_INT_MAX

L'int di PHP su sistemi a 64 bit è un intero con segno a 64 bit (valore massimo 9223372036854775807); se l'ID numerico in JSON supera questo intervallo (es. ID fiocco di neve di Twitter), verrà troncato. Soluzioni: ① ricevi l'ID come tipo stringa ("id": "1234567890123456789"); ② analizza con il flag JSON_BIGINT_AS_STRING.

Glossario

namespace
Meccanismo di namespace introdotto in PHP 5.3+ per evitare conflitti di nomi di classe. Questo strumento genera automaticamente in base al namespace configurato dall'utente e organizza nel ZIP per directory App/Models/.
class
Modello che definisce oggetti in PHP. Questo strumento genera class PHP standard, istanziabile direttamente tramite new User(...).
ArrayObject
Classe nella libreria standard SPL di PHP che implementa interfacce come ArrayAccess. Le classi generate in stile ArrayObject da questo strumento ereditano da \ArrayObject, supportando accesso doppio stile array e oggetto.
stdClass
Classe oggetto generica integrata di PHP; json_decode($json, false) restituisce questo tipo per impostazione predefinita. Le classi generate in stile stdClass da questo strumento ereditano da \stdClass, supportano solo accesso stile oggetto.
typed properties
Dichiarazioni di tipo di proprietà introdotte in PHP 7.4+ (es. public int $id). Le proprietà generate da questo strumento hanno dichiarazioni di tipo per impostazione predefinita; l'IDE e gli strumenti di analisi statica possono eseguire il controllo dei tipi direttamente.
readonly class
Classe di sola lettura introdotta in PHP 8.1+; tutte le proprietà nella classe sono automaticamente readonly, non modificabili dopo costruzione. Questo strumento genera final readonly class in stile readonly, adatto a scenari DTO immutabili.
JsonSerializable
Interfaccia introdotta in PHP 5.4+; gli oggetti che implementano questa interfaccia chiamano automaticamente il metodo jsonSerialize() durante json_encode(). Tutte le classi di questo strumento implementano automaticamente questa interfaccia.
Jsonable (Laravel)
Interfaccia di contratto del framework Laravel; dopo l'implementazione, l'oggetto può chiamare toJson() per restituire JSON. Lo stile integrazione Laravel di questo strumento implementa automaticamente questa interfaccia.
Arrayable (Laravel)
Interfaccia di contratto del framework Laravel; dopo l'implementazione, l'oggetto può chiamare toArray() per restituire array. Lo stile integrazione Laravel di questo strumento implementa automaticamente questa interfaccia.
Composer
Strumento ufficiale di gestione delle dipendenze di PHP. Quando si utilizza il codice generato da questo strumento, è necessario configurare l'autoload PSR-4 in composer.json (es. App\\: src/).
PSR-4
Standard di autoload specificato da PHP-FIG, che carica i file di classe tramite mapping namespace a directory. Il pacchetto ZIP generato da questo strumento è organizzato per percorso namespace, conforme allo standard PSR-4.
Symfony Serializer
Framework di serializzazione del componente Symfony. Le classi generate in stile ArrayObject da questo strumento possono collaborare con PropertyNormalizer di Symfony Serializer per serializzazione e deserializzazione profonde.
Eloquent API Resource
Classe di risorse API di Laravel Eloquent, utilizzata per formattare le risposte API. Le classi generate in stile integrazione Laravel da questo strumento possono essere utilizzate direttamente come classi base API Resource.
composer.json
File di configurazione del progetto Composer. Dopo aver posizionato il codice generato da questo strumento nella directory src, è necessario configurare la sezione autoload in composer.json ed eseguire composer dump-autoload.
json_encode / json_decode
Funzioni integrate di serializzazione e deserializzazione JSON di PHP. Dopo che le classi generate da questo strumento implementano JsonSerializable, json_encode() chiama automaticamente il metodo jsonSerialize().
PHPUnit DataProvider
Meccanismo di fornitore di dati del framework di test PHPUnit. Le classi PHP generate da questo strumento possono essere iniettate nel caso di test come DataProvider, migliorando l'efficienza di scrittura dei test con l'autocompletamento IDE.
PHPStan
Strumento di analisi statica per PHP, può eseguire controllo dei tipi, rilevazione di errori sul codice. Le classi generate da questo strumento, avendo typed properties, possono avere i tipi di proprietà completamente dedotti da PHPStan in modalità --level=8.
Psalm
Un altro strumento di analisi statica per PHP, open-source di Vimeo. Le classi generate da questo strumento, con PropertyTypeProvider di Psalm, possono eseguire una validazione dei tipi forte.
Doctrine
Set di strumenti ORM e DBAL nell'ecosistema PHP. Le classi PHP generate da questo strumento possono servire da scheletro per Doctrine Entity, quindi aggiungere manualmente annotazioni come #[ORM\Column].
php -l
Direttiva di controllo sintassi nella riga di comando PHP. Le classi generate da questo strumento possono prima eseguire php -l User.php per la validazione della sintassi prima di richiederle nel progetto.
Composer dump-autoload
Comando per far sì che Composer rigeneri l'indice di autoload. Dopo aver posizionato le classi generate da questo strumento nella directory src, è necessario eseguire composer dump-autoload per essere riconosciute dall'autoload PSR-4.
JSON_THROW_ON_ERROR
Flag per la gestione degli errori di json_decode() in PHP 7.3+; all'attivazione, l'analisi JSON fallita lancia eccezione JsonException. L'esempio Laravel di questo strumento utilizza l'analisi rigorosa.
Hash (PHP)
Funzione di hash integrata di PHP, comunemente utilizzata per la verifica della firma WebHook. Le classi di callback WebHook generate da questo strumento funzionano con hash_hmac() per la verifica della firma.

Tabella di riferimento mapping tipo JSON a tipo PHP

Tipi di dati JSON rilevati automaticamente dallo strumento e riferimento del tipo PHP corrispondente:

Esempio valore JSONMetodo di rilevazioneTipo PHP generatoValore predefinito proprietà
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 vuoto)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>)[]
{...} (oggetto annidato)typeof value === 'object' && !Array.isArray(value)Xxx (classe indipendente)new Xxx()

Tabella di confronto 4 stili di codice PHP

4 stili di codice classe PHP supportati dallo strumento; scegli in base alle esigenze del progetto:

Stile codiceEstende / ModificatoreImplementa interfacciaCaso d'uso
Stile ArrayObjectextends \ArrayObjectimplements \JsonSerializableEcosistema Symfony Serializer, richiede accesso stile array $obj['key'], compatibile con libreria standard PHP
Stile stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, compatibile con comportamento predefinito json_decode, supporto dati oggetto leggero
Stile readonly classfinal readonly class (nessuna ereditarietà)implements \JsonSerializablePHP 8.1+, DTO risposta API, oggetti di trasferimento dati immutabili, garantire che i dati non vengano modificati dopo costruzione
Stile integrazione Laravelnessuna ereditarietà (predefinito)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, strato modelli Eloquent, formattazione risposte controller

Privacy & Security

Tutte le operazioni di analisi JSON, generazione classi PHP, creazione pacchetto ZIP di questo strumento JSON to PHP avvengono completamente localmente nel tuo browser tramite JavaScript (quicktype-core + JSZip); i dati JSON di input e il codice PHP generato non vengono caricati su nessun server, né salvati, messi in cache o archiviati nel cloud. JSON sensibile contenente campi interfaccia interni, strutture business non rilasciate, risposte API non pubbliche può essere utilizzato in sicurezza; tutti i dati vengono cancellati alla chiusura della pagina. Questo strumento non utilizza alcun Cookie per il tracciamento degli utenti, non raccoglie informazioni di e-mail o account, non integra script di statistiche di terze parti; tutti i calcoli avvengono nel processo del browser del dispositivo attuale. Anche in ambiente offline (es. disconnesso o intranet isolato) funziona normalmente, a condizione che le risorse della pagina siano state caricate una volta.

Authoritative References