logo
GeekFormat

JSON a PHP

Eina gratuïta en línia JSON a PHP, converteix JSON en classes PHP executables directament amb un clic. Admet dos estils ArrayObject i stdClass, genera automàticament namespace, typed properties (PHP 7.4+), readonly class opcional (PHP 8.1+), implementa JsonSerializable, objectes imbricats dividits automàticament en classes independents, arrays convertits automàticament en array PHP, execució local al navegador sense necessitat de descàrrega.

Relacionats

Sobre JSON a classe PHP i modelatge de classes d'entitat PHP

L'eina JSON a PHP (JSON to PHP Converter) és una utilitat que converteix automàticament estructures de dades JSON en codi de classe PHP estàndard. Allibera els desenvolupadors de la feina repetitiva d'escriure manualment namespace / class / propietats public / constructor, particularment adequada per convertir ràpidament JSON d'exemple en documentació d'interfície API en classes d'entitat PHP que es poden requerir directament en projectes Composer.

Aquesta eina admet 4 estils de codi principals: ① Estil ArrayObject (estén \ArrayObject, admet accés array i objecte, comú en ecosistema Laravel / Symfony Serializer); ② Estil stdClass (estén \stdClass, només accés objecte, comportament per defecte WordPress / json_decode); ③ Estil readonly class (PHP 8.1+ final readonly class, immutable després de construcció, adequat per a DTO); ④ Estil integració Laravel (implementa Jsonable + Arrayable, funciona amb Eloquent API Resource). Els desenvolupadors poden triar lliurement segons framework utilitzat pel projecte.

El mapping de tipus PHP és el cor de JSON a PHP. L'eina mapeja tipus bàsics JSON en tipus estàndard PHP: string mapeja a string, enter a int, float a float, booleà a bool, array a array, objectes imbricats a classe independent (primera lletra del nom de camp en majúscula), null a ?type (propietat nullable). Totes les propietats es declaren amb typed properties de PHP 7.4+, l'IDE pot fer comprovació de tipus directament.

Un altre punt fort diferenciador és 'implementa automàticament interfície JsonSerializable': cada classe PHP generada per aquesta eina implementa automàticament \JsonSerializable i genera mètode public function jsonSerialize(): mixed { return [...] }. Això significa que pots fer directament echo json_encode($user) per mostrar cadena JSON, i json_encode cridarà automàticament dades de l'array retornades per jsonSerialize(). A Laravel amb la interfície Jsonable també pots fer directament return response()->json($user) sense cap processament addicional.

A diferència d'algunes eines en línia que requereixen pujar JSON a servidor per processar, tots els càlculs d'aquesta eina s'executen al navegador. quicktype-core es carrega i s'executa mitjançant Web Worker; anàlisi JSON, inferència de tipus, generació de codi PHP, empaquetat ZIP ocorren localment, no envien dades a cap servidor. Això és particularment important per a JSON que conté claus API, camps de confidencialitat d'usuari o estructures de negoci no llançades; les dades s'esborren de la memòria després de tancar la pàgina.

El codi generat s'ha de col·locar generalment en projecte Composer per a ús. Has d'assegurar-te que la versió PHP compleixi els requisits a composer.json (PHP 7.4+ suporta typed properties, PHP 8.1+ suporta readonly class), després copiar les classes generades al directori src, càrrega automàtica mitjançant namespace (PSR-4). Després pots consumir dades amb json_decode($jsonString, false) o json_decode($jsonString, true) + deserialització, gaudint dels avantatges del sistema de tipus PHP.

Casos d'ús

  • Desenvolupament backend Laravel: convertir ràpidament JSON d'exemple de documentació d'interfície API en classes Eloquent Model / API Resource, serialitzar respostes directament amb interfícies Jsonable / Arrayable integrades de Laravel
  • Integració Symfony Serializer: convertir JSON retornat per APIs de tercers en classes PHP estil ArrayObject, fer mapping profund d'objectes i validació de dades amb Symfony Serializer
  • WordPress REST API: convertir estructura JSON retornada per endpoints personalitzats en classes PHP estil stdClass, sortida directa amb wp_send_json(), conforme al comportament per defecte de wp_json_encode()
  • PHP 8.1+ readonly DTO: convertir JSON en final readonly class per a Data Transfer Object (DTO), immutables després de construcció, evitant que la lògica de negoci modifiqui accidentalment les dades de resposta
  • Desenvolupament de paquets Composer: convertir JSON Schema en classes PHP després publicar a Packagist com a capa model SDK, perquè altres projectes Composer el requereixin i reutilitzin
  • Fixture de tests unitaris: convertir fixture JSON en classes PHP després utilitzar amb json_decode + deserialització per a tests basats en dades, assertion de camps estructurats
  • Scripts de migració de dades: convertir fitxers de configuració JSON en classes PHP després utilitzar-les per a accés fortament tipat en lògica de negoci, més fàcil autocompletat IDE i comprovació de tipus que accés array
  • Integració Frontend Mock: backend converteix primer models JSON en classes PHP, frontend obté simultàniament la interfície TypeScript / classe PHP corresponent, mantenint els tipus consistents als dos extrems
  • Code review: convertir JSON retornat per API directament en classes PHP llegibles, facilitant discussió sobre nomenclatura de camps, visibilitat de propietats durant Code Review
  • Refactorització de projectes llegats: refactoritzar codi d'accés dinàmic basat en array associatiu en accés fortament tipat basat en classe PHP, fer anàlisi estàtica amb PHPStan / Psalm
  • PHPUnit DataProvider: convertir dades de test JSON en classes PHP després injectar en cas de test mitjançant DataProvider, l'IDE suggereix automàticament els camps de propietats
  • Integració API backend snake_case: API backend retorna camps snake_case, el sistema PHP frontend activa 'converteix a camelCase' + estil ArrayObject per a integració transparent
  • Anàlisi estàtica PHPStan: les classes generades tenen naturalment declaracions de tipus, amb phpstan analyse --level=8 interceptar errors de tipus en CI
  • Ensenyament i formació: en escenaris d'ensenyament PHP, convertir JSON d'exemple en classes PHP per demostrar modelatge orientat a objectes, sistema de tipus, implementació d'interfícies
  • Capa passarel·la API: convertir JSON retornat per microserveis aigües amunt en classes PHP per a agregació en capa passarel·la, els serveis PHP aigües avall consumeixen fortament tipats mitjançant propietats de classe
  • Consum de cues de missatges: convertir cossos de missatges JSON consumits de RabbitMQ / Kafka en classes PHP després emmagatzemar o reenviar, anàlisi rigorosa amb JSON_THROW_ON_ERROR
  • Modelatge SKU/SPU e-commerce: convertir estructura JSON de producte (multi-especificació / multi-imatge / multi-atribut) en classes PHP, amb estil ArrayObject fer optimització de consultes N+1 a Laravel
  • Verificació de signatura de callback WebHook: convertir estructura de verificació de signatura JSON de passarel·les de pagament, callbacks logístics en classes PHP, verificació de signatura amb hash_hmac()
  • Toolchain OpenAPI: convertir schema JSON d'OpenAPI 3.x en classes PHP, integrar amb flux de generació de client PHP de Swagger Codegen / Apifox
  • Pipeline ETL de dades: convertir JSON de fonts de dades aigües amunt (camp JSON MySQL / MongoDB / Elasticsearch) en classes PHP després neteja de dades i emmagatzematge

Com usar-ho

  1. Enganxa objecte JSON (recomanat) o array a l'editor esquerre, o fes clic a 'Sample' per carregar exemple en xinès (amb address / company / tags imbricats)
  2. Fes clic al botó 'Configuració' a la barra d'eines, al diàleg selecciona: ① estableix nom de classe arrel (ex. User) i namespace (ex. App\Models); ② selecciona estil de codi (ArrayObject / stdClass / readonly class); ③ selecciona funcionalitats de codi (typed properties / integració Laravel / Symfony Serializer); ④ selecciona estratègia de nomenclatura de camps (mantenir original / camelCase / tot minúscules / UPPER_SNAKE)
  3. L'eina convertirà automàticament en 400ms, la dreta mostra totes les classes PHP generades (cada classe una targeta independent, la barra de títol mostra badge d'estil actual en temps real); si JSON té errors de format es mostrarà botó 'Repara JSON'
  4. Verifica que els noms de classe generats, noms de propietats i interfícies compleixin les expectatives; si cal adaptació pots modificar els noms de clau del JSON font o reobrir Configuració per modificar les opcions
  5. Quan satisfet pots fer clic al botó 'Copiar' de classe individual per enganxar a l'IDE, o fer clic a 'Download ZIP' a la barra d'eines per descarregar totes les classes amb un clic (estructura de directoris organitzada per camí namespace)

Característiques

  • Dos estils de codi commutables lliurement: ArrayObject (estén \ArrayObject, admet accés estil array $obj['key']) / stdClass (estén \stdClass, admet accés estil objecte $obj->key), compatible amb diferents escenaris com serialització Laravel, WordPress REST, Symfony Serializer
  • Plantilla PHP completa: genera automàticament declaració namespace + instruccions use + comentari de capçalera de classe (Copyright + timestamp de generació) + definició de classe + propietats públiques tipades (PHP 7.4+), es pot requerir directament en projecte Composer sense completar manualment el boilerplate
  • Interfície JsonSerializable implementada automàticament: cada classe generada crea automàticament public function jsonSerialize(): mixed { return [...] }, serialitza JSON directament amb json_encode(), zero codi boilerplate addicional
  • readonly class PHP 8.1+ opcional: en activar-se, la classe generada afegeix final readonly class, totes les propietats són readonly, immutables després de construcció, adequat per a escenaris DTO de resposta API immutables
  • Inferència de tipus intel·ligent: string → string, integer → int, float → float, bool → bool, array → array, objectes imbricats → classe independent, null → ?type (propietat nullable), sense especificació manual de tipus de camp
  • Classes imbricades dividides automàticament: objectes imbricats generen classes PHP independents amb primera lletra del nom de camp en majúscula (ex. address → Address), objectes en arrays nomenats segons regla 'eliminar s final' (ex. users → User), totes les classes imbricades també implementen JsonSerializable
  • 4 estratègies de nomenclatura de camps: mantenir original / snake_case a camelCase (user_name → userName) / tot minúscules / estil constants UPPER_SNAKE, conformes a diferents estàndards de codificació PSR-1 / Laravel / Symfony
  • Integració Laravel en un clic: en activar-se, implementa automàticament interfícies Jsonable, Arrayable, afegeix mètodes toArray() / toJson(), es pot utilitzar directament com Eloquent API Resource, amb autoload Composer
  • Copiar classe individual + descàrrega ZIP multi-fitxer: cada classe PHP té botó 'Copiar' independent, pot descarregar amb un clic paquet ZIP organitzat per estructura de directoris namespace (ex. App/Models/User.php), descomprimir i utilitzar
  • Execució local al navegador + historial: anàlisi JSON, generació de classes PHP, empaquetat ZIP mitjançant JavaScript (quicktype-core + JSZip) al navegador, dades no pujades a servidor; historial localStorage integrat per a 200 entrades recents

Exemples de codi

PHP: Serialitzar classes generades per aquesta eina amb json_encode()

php

Les classes PHP generades per aquesta eina implementen la interfície JsonSerializable per defecte, retornen JSON directament amb json_encode() sense cap processament addicional.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

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

// 1) Deserialitza a classe generada per aquesta eina
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) Accés als camps fortament tipat (autocompletat IDE + comprovació estàtica PHPStan)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? 'Actiu' : 'Inactiu'; // Actiu

// 3) json_encode() crida automàticament jsonSerialize(), cap codi addicional necessari
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "isActive": true
}
*/

PHP: Exemple d'integració Laravel API Resource

php

Després de marcar la integració Laravel, les classes generades per aquesta eina es poden utilitzar directament com a Eloquent API Resource, formatant les respostes amb 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: Exemple d'integració Symfony Serializer

php

Les classes generades en estil ArrayObject per aquesta eina poden funcionar amb el component Symfony Serializer per a serialització i deserialització profunda, adequades per a capes de passarel·la API complexes.

<?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 a la majoria de projectes backend PHP, les classes generades en estil ArrayObject suporten tant accés array ($obj['key']) com accés objecte ($obj->key); amb la interfície JsonSerializable implementada per defecte, json_encode() crida automàticament l'array retornat per jsonSerialize(). Aquest és el patró de transport de dades d'objecte més universal a l'ecosistema PHP, compatible amb gairebé tots els frameworks mainstream com Laravel, Symfony, CodeIgniter.

La classe readonly introduïda a PHP 8.1+ és la millor pràctica per a DTOs: propietats immutables després de la construcció, evitant que la lògica de negoci modifiqui accidentalment les dades de resposta; la promoció de constructor fa que el codi sigui més concís (public function __construct(public int $id, public string $name) {} una línia per a les declaracions de propietats). Recomanem convertir els DTOs de resposta API, estructures de callback WebHook, models client API de tercers a l'estil readonly class.

Els camps de base de dades Laravel són per defecte snake_case, però les propietats PHP recomanen camelCase. L'estratègia 'Converteix a camelCase' d'aquesta eina converteix automàticament, mentre que les claus de l'array de retorn de jsonSerialize() mantenen el snake_case original; la sortida json_encode() roman snake_case. Això respecta tant els hàbits d'accés al model Laravel com manté la compatibilitat API.

Els paquets ZIP generats s'organitzen per camí namespace (ex. App/Models/User.php). Configura la secció autoload.psr-4 a composer.json, per exemple: "App\\": "src/", després executa composer dump-autoload. D'aquesta manera el Composer mapejarà automàticament App\Models\User a src/Models/User.php sense require manual.

Aquesta eina genera per defecte propietats tipades (PHP 7.4+), els tipus de propietats de les quals poden ser completament inferits per PHPStan en mode --level=8. Recomanem integrar phpstan analyse ./src --level=8 a la pipeline CI per interceptar errors de tipus. Psalm també suporta PropertyTypeProvider per a validació de tipus forta.

Aquesta eina s'executa completament localment al navegador i no carrega cap dada. Però crea l'hàbit: ① dessensibilitza JSONs que contenen claus API / tokens / privacitat d'usuari abans de la conversió; ② assegura't que la connexió de xarxa està desconnectada en utilitzar aquesta eina per a grans estructures de negoci internes (interfícies no publicades); ③ no commitis dades d'exemple que continguin informació sensible en repositoris públics després de la generació de codi.

Els objectes JSON anidats generen recursivament classes PHP independents. Si els nivells d'anidament JSON superen les 6 capes (ex. menús anidats multinivell, organigrames, documents de negoci complexos), el nombre de classes generades explota (N classes anidades per capa), l'IDE es carrega lentament i el manteniment es fa difícil. Recomanacions: ① divideix el JSON en diversos mòduls i converteix per separat; ② o després de la generació refactoritza manualment a indexació d'array ($user['profile']['address']['city']) en lloc d'anidament de classes.

Els valors null JSON són inferits per defecte com a ?mixed (mixed nullable), que és un fallback segur però no un tipus precís. Si el tipus de camp és conegut (ex. "nickname": "" infereix string), proporciona primer un valor d'exemple al JSON d'origen, després de la generació elimina el valor d'exemple i canvia a un tipus precís com ?string, millorant significativament la precisió de l'anàlisi estàtica PHPStan.

Preguntes freqients

Com convertir JSON a classe PHP?

Enganxa contingut JSON a l'àrea d'entrada esquerra, l'eina convertirà automàticament en 400ms; o fes clic al botó 'Convert' a la barra d'eines. Després de la conversió, la dreta mostra totes les classes PHP generades, cada classe té botó 'Copiar' independent; fes clic a 'Download ZIP' a la barra d'eines per empaquetar i descarregar totes les classes amb un clic (incloent estructura de directoris namespace).

Quines estructures de dades JSON són suportades?

Admet dues estructures: ① Objecte JSON (com a classe arrel, genera automàticament class RootClass); ② Array JSON (primer objecte de l'array com a plantilla de classe arrel). Tots els objectes imbricats es processen recursivament en classes independents; els objectes en arrays es processen recursivament en classes corresponents al tipus d'element de l'array.

Què contenen les classes PHP generades?

Cada fitxer .php generat conté: ① comentari de capçalera de fitxer (Copyright + timestamp generat automàticament); ② declaració namespace; ③ instruccions use (incloent \JsonSerializable / \ArrayAccess etc. importats automàticament segons necessitat); ④ definició de classe (ArrayObject / stdClass / readonly class segons configuració); ⑤ implementacions d'interfícies (JsonSerializable / Jsonable / Arrayable segons configuració); ⑥ propietats públiques tipades (PHP 7.4+); ⑦ constructor (assignació de totes les propietats generada segons configuració); ⑧ mètodes jsonSerialize() / toArray() / toJson() etc. Completament llestos per a comprovació de sintaxi php -l i ús mitjançant require.

Quina és la diferència entre els estils ArrayObject i stdClass?

Estil ArrayObject: classe generada estén \ArrayObject, admet tant accés estil array $obj['key'] com accés estil objecte $obj->key, retorna objecte durant json_encode(). Estil stdClass: classe generada estén \stdClass, admet només accés estil objecte $obj->key, més lleugera però sense accés directe a arrays. L'ecosistema Laravel/WordPress utilitza estil stdClass per defecte (comportament per defecte de json_decode), Symfony Serializer utilitza estil ArrayObject per defecte.

Admet la generació de Laravel API Resource?

Sí. Després d'activar l'opció 'Integració Laravel en un clic' a la configuració, l'eina genera automàticament interfícies Jsonable, Arrayable implementades, afegeix mètodes toJson($options = 0) i toArray(), les classes generades es poden utilitzar directament en Eloquent API Resource (com new UserResource($user) o $user->toArray()). També utilitza automàticament Illuminate\Contracts\Support\Jsonable i Illuminate\Contracts\Support\Arrayable.

Com és el codi generat en mode PHP 8.1 readonly class?

Després d'activar readonly class, les classes PHP generades se simplifiquen significativament. Per exemple, class User amb readonly activat té unes 12 línies: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Totes les propietats es declaren readonly mitjançant constructor property promotion, immutables després de construcció. Nota: el projecte requereix PHP 8.1+, els camps readonly només es poden assignar mitjançant constructor.

Com convertir noms de camp snake_case a camelCase?

Al grup 'Estratègia de nomenclatura de camps' del diàleg de configuració, selecciona mode 'Converteix a camelCase', l'eina convertirà automàticament noms de camp JSON de snake_case a l'estil de nomenclatura recomanat per PHP. Per exemple user_name → userName, created_at → createdAt, is_active → isActive. A més si JSON prové de binding de ruta Laravel, les propietats de classe són accessibles directament mitjançant $request->userName sense conversió intermèdia manual.

Com es processen els objectes JSON imbricats?

L'eina crea automàticament classes PHP independents per a objectes imbricats. Regla de nomenclatura: clau d'objecte imbricat amb primera lletra majúscula com a nom de classe (ex. address → Address), clau d'objecte en arrays eliminant s final després primera lletra majúscula (ex. users → User). Totes les classes imbricades també inclouen camps complets, constructor, mètode jsonSerialize(), namespace coherent amb classe arrel, es poden importar mitjançant use App\Models\Address.

Els camps array es converteixen automàticament?

Sí. Els camps array en JSON es converteixen automàticament en propietats PHP array, tipus d'element inferit automàticament del primer element de l'array. Per exemple ["a","b","c"] → array (anotat com a array<string> en comentari); [{...},{...}] → array (anotat com a array<User> en comentari, User és nova classe nomenada des de clau); array buit [] per defecte array (anotat com a array<mixed> en comentari). PHP 8.0+ amb anotacions PHPDoc pot obtenir suggeriments de tipus a l'IDE.

Com modificar nom de classe arrel i namespace?

Hi ha un botó Configuració a la cantonada superior dreta de la barra d'eines, fes clic per obrir diàleg de configuració, pots configurar: ① nom de classe arrel (per defecte JsonRootClass); ② namespace (per defecte App\Models). Després de la modificació, tots els noms de classe generats s'actualitzen sincrònicament, l'estructura de directoris al ZIP també s'organitza per namespace (ex. App/Models/User.php).

La descàrrega és un sol fitxer .php o paquet ZIP?

La descàrrega és paquet ZIP (User.zip), conté totes les classes PHP generades, organitzades en estructura de directoris per camí namespace. Per exemple quan namespace és App\Models, l'estructura de fitxers al ZIP és: App/Models/User.php, App/Models/Address.php, App/Models/Company.php etc. Es pot importar directament al directori src del projecte Composer mitjançant ordre unzip o IDE.

Puc copiar una classe individual directament a l'IDE?

Sí. Cada classe PHP generada es mostra com una targeta independent, la cantonada superior dreta de la targeta té botó 'Copiar', en fer clic tot el codi complet de la classe (incloent <?php + namespace + use + classe + propietats + constructor + mètodes) es copia al porta-retalls, es pot enganxar directament a IDE com PhpStorm / VS Code / Sublime.

Com fer que les classes generades implementin la interfície JsonSerializable?

Activat per defecte. Totes les classes PHP generades implementen automàticament \JsonSerializable i generen mètode public function jsonSerialize(): array { return [...] }, array retornat muntat en l'ordre de les propietats de classe. Pots fer directament echo json_encode($user) per mostrar cadena JSON, o a Laravel return response()->json($user).

Symfony Serializer pot utilitzar les classes generades per aquesta eina?

Sí. Symfony Serializer llegeix dades en estil array per defecte, ben compatible amb classes generades en estil ArrayObject. Amb $serializer->serialize($user, 'json') de SerializerInterface pot serialitzar directament; durant la deserialització amb deserialize() la classe necessita propietats públiques o getter. Aquesta eina genera estil propietats públiques + assignació per constructor, es pot utilitzar directament amb PropertyNormalizer de Symfony Serializer.

Què fer si JSON té errors de format?

L'eina detecta automàticament la validesa JSON, en cas d'error mostra avís d'error vermell a la dreta i proporciona botó 'Repara JSON'. En fer clic pot reparar automàticament errors comuns: ① comes finals superflus; ② cometes simples reemplaçades per cometes dobles; ③ completar cometes per a claus sense cometes; ④ eliminació de comentaris. Després de la reparació reeixida pot convertir directament per generar classes PHP.

Les dades es pugen a servidor? És privat i segur?

Execució completament local al navegador. Tota l'anàlisi JSON, generació de classes PHP, empaquetat ZIP es produeixen al teu navegador mitjançant JavaScript (quicktype-core + JSZip), les dades JSON d'entrada i el codi PHP generat no es pugen a cap servidor, ni es desen o es posen en memòria cau al núvol. JSON sensible que conté camps d'interfície interna, estructures de negoci no llançades, respostes API no públiques es pot utilitzar amb seguretat, esborrat en tancar la pàgina.

Generar un JSON gran de 10.000 línies causarà alentiment?

L'eina no té un límit explícit de línies, però l'anàlisi i el renderitzat de JSON molt gran per part del navegador seran més lents. Recomanacions: ① dividir JSON i convertir per lots; ② concentrar-se en un nivell d'imbricació alhora; ③ si necessites generar per lots 100+ classes, recomanem utilitzar directament plugins de model PHP de l'IDE o escriure un script CLI quicktype senzill.

Les classes PHP generades suporten versions anteriors a PHP 7.4?

No completament. Les classes generades per aquesta eina utilitzen per defecte typed properties de PHP 7.4+ (ex. public int $id). Si el teu projecte encara és PHP 7.0~7.3, les declaracions de tipus causaran problemes de compatibilitat. Recomanacions: ① actualitzar projecte a PHP 8.1+ (recomanat, millors rendiments i sistema de tipus); ② o eliminar declaracions de tipus per lots a l'IDE després de generació (Find & Replace `public int ` → `public `); ③ o utilitzar mode compatible PHP 7.4 (PHP 7.4 és la línia base d'aquesta eina).

Solució de problemes

Mostra 'Introdueix dades JSON' o dreta buida

L'àrea d'entrada esquerra està buida o conté només espais en blanc. Assegura't que has enganxat contingut JSON vàlid, o fes clic a 'Sample' per carregar exemple en xinès, o fes clic a 'Upload' per seleccionar fitxers .json / .txt.

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

Format JSON no vàlid. Causes comuns: ① comes extra al final (ex. {"a":1,}); ② cometes simples utilitzades en lloc de cometes dobles; ③ notació d'objecte JS (ex. {key: value}) en lloc de JSON (ex. {"key": "value"}). Fes clic al botó 'Repara JSON' per corregir automàticament alguns errors.

Codi generat error en projecte PHP 7.x amb 'Typed property must not be accessed before initialization'

Les classes generades per aquesta eina utilitzen per defecte propietats tipades PHP 7.4+ (ex. public int $id). Si el teu projecte encara és PHP 7.0~7.3, les declaracions de tipus causen problemes de compatibilitat. Solucions: ① actualitza el projecte a PHP 8.1+ (recomanat, millor rendiment i sistema de tipus); ② elimina en lot les declaracions de tipus a l'IDE (Cerca & Substitueix `public int ` → `public `); ③ desmarca l'opció 'Propietats tipades PHP 7.4' (eficaç només per a alguns estils de codi).

Classe readonly PHP 8.1 error 'Cannot modify readonly property'

Les propietats generades en estil readonly class no es poden modificar després de la construcció. Si intentes $user->name = 'Bob' es produirà un error. Solucions: ① canvia a l'estil ArrayObject o stdClass (propietats modificables); ② o crea una nova instància amb new User(...) en lloc de modificar.

No s'ha pogut trobar Illuminate\Contracts\Support\Jsonable en projecte Laravel

L'estil d'integració Laravel requereix la dependència laravel/framework. Assegura't a composer.json de tenir: "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Després executa composer update per instal·lar dependències. Si no utilitzes Laravel, si us plau tria l'estil ArrayObject o stdClass.

Ha fallat la deserialització Symfony Serializer 'Cannot denormalize object'

Causes comuns: ① la classe generada no té propietats públiques o mètodes getter (Symfony Serializer utilitza PropertyNormalizer per defecte); ② la classe no té constructor sense paràmetres però té paràmetres obligatoris. Solucions: ① confirma que aquesta eina ha generat propietats públiques; ② construeix manualment l'objecte mitjançant el mètode estàtic fromArray() després passa'l al Serializer.

Nom de classe d'objecte anidat diferent de l'esperat (ex. categories anomenat Categori)

L'eina utilitza la regla de denominació 'eliminar s final + majúscula' per a objectes en arrays; per a plurals irregulars com categories això no és precís. Recomanacions: ① canvia la clau JSON d'origen a singular (ex. categories → category); ② o després de la generació utilitza Canvia Nom de l'IDE per reanomenar la classe (modificant totes les referències simultàniament).

Estructura de directoris del ZIP incorrecta després de l'extracció

Els directoris dins del ZIP s'organitzen segons la configuració de namespace (per defecte App/Models/). Si la posició és incorrecta després de l'extracció: ① modifica el nom namespace (ex. a App\Dto) i descarrega de nou; ② especifica directori d'extracció amb unzip -d src/; ③ o directament a l'IDE Fitxer → Obrir tota la carpeta extreta.

Classes generades no es carreguen automàticament

Els projectes Composer requereixen configuració de mapatge autoload PSR-4 a composer.json, per exemple: "autoload": { "psr-4": { "App\\": "src/" } }. Després executa composer dump-autoload; el Composer carregarà automàticament els fitxers de classe per mapatge namespace-a-directori.

Nom del camp canviat després de conversió snake_case a camelCase

'Converteix a camelCase' canvia noms de propietats PHP (ex. user_name → userName), però les claus de l'array de retorn al mètode jsonSerialize() mantenen el snake_case original; el JSON generat per json_encode() encara té els noms de camp originals. Així que per accedir a la propietat PHP utilitza $user->userName, la sortida JSON encara és {"user_name": "..."}. Si també vols accés camelCase durant la deserialització, has de canviar les claus a camelCase a l'array de retorn de jsonSerialize().

Pàgina es ralenteix en generar 100+ classes anidades

L'eina no té límit explícit de nombre de classes, però el rendiment de renderització de DOM extremadament gran del navegador disminueix significativament. Recomanacions: ① divideix el JSON en diversos mòduls independents i converteix per separat; ② o utilitza directament les eines de generació de codi integrades a l'IDE (ex. plugin JSON to PHP de PhpStorm); ③ es recomana que els nivells d'anidament no superin les 6 capes, en cas contrari recomanem refactoritzar l'estructura JSON.

Array és de tipus numèric però genera array<int> en lloc d'array<float>

L'eina infereix el tipus a partir del primer element de l'array (ex. [1, 2, 3] infereix int, [1.5, 2.5] infereix float). Si barreges enters i floats (ex. [1, 2.5]), l'eina inferirà a partir del primer element. Solucions: ① afegeix almenys un element float d'exemple al JSON d'origen (ex. [0.0, 1.5]); ② o ajusta manualment el tipus a l'anotació PHPDoc després de la generació.

Camp de valor null generat com a tipus ?mixed en lloc de ?string

Els valors null JSON són inferits per defecte com a tipus ?mixed per l'eina (perquè el tipus real no es pot determinar). Aquesta és una pràctica segura per evitar errors de judici. Si el tipus és conegut, dóna a aquest camp un valor d'exemple al JSON d'origen (ex. "field": "" infereix string), després de la generació canvia el tipus a ?string.

Després de composer dump-autoload la classe encara no es carrega automàticament

Possibles causes: ① namespace no coincideix amb el directori (ex. namespace App\Models però fitxer a src/Dto/); ② el mapatge psr-4 de composer.json està escrit incorrectament (ex. "App\\": "src/Dto/" hauria de ser "App\\Dto\\": "src/Dto/"). Solucions: comprova que el namespace de cada fitxer .php coincideix estrictament amb el camí del directori (els segments namespace han de ser iguals als segments de directori, distingint majúscules de minúscules).

PHPStan reporta 'Property does not have default value'

Les propietats tipades generades no tenen valors per defecte; PHPStan en mode --level=8 les considera com a potencialment no inicialitzades. Solucions: ① desactiva les regles estrictes de PHPStan; ② assigna valors buits al constructor (ex. $this->tags = []); ③ utilitza l'estil readonly class (assignat immediatament després de la promoció del constructor).

Ha fallat la deserialització d'array d'objectes Symfony Serializer

Per a arrays d'objectes com [{...},{...}], PropertyNormalizer necessita indicacions de tipus d'element. Solucions: ① especifica explícitament el tipus array<User> a PHPDoc; ② o embolcalla amb ArrayCollection ($users = new ArrayCollection()).

Claus xineses generen noms de propietats PHP amb caràcters especials

Quan el JSON d'origen conté claus xineses (ex. "姓名": "Alice"), l'eina generarà una propietat public string $姓名; l'IDE pot assenyalar que la nomenclatura no és estàndard però no es produirà cap error. Recomanacions: ① canvia les claus JSON a anglès (més conforme a la convenció de nomenclatura PHP PSR-1); ② mantenint el xinès assegura't que la codificació del fitxer PHP és UTF-8 (PHP és UTF-8 per defecte).

Estil ArrayObject $obj['key'] vs $obj->key ordre de sortida inconsistent

L'accés array en estil ArrayObject retorna en l'ordre de declaració de la propietat, l'accés objecte retorna en l'ordre de l'array de retorn al mètode jsonSerialize(). Si els dos ordres són inconsistents, la sortida d'echo json_encode() serà inconsistent amb var_dump($obj). Recomanació: mantingues l'ordre de retorn de jsonSerialize() coherent amb l'ordre dels paràmetres del constructor.

ID numèric en JSON de callback WebHook supera PHP_INT_MAX

L'int de PHP en sistemes de 64 bits és un enter amb signe de 64 bits (valor màxim 9223372036854775807); si l'ID numèric en JSON supera aquest interval (ex. IDs floc de neu de Twitter), serà truncat. Solucions: ① rep l'ID com a tipus cadena ("id": "1234567890123456789"); ② analitza amb la bandera JSON_BIGINT_AS_STRING.

Glossari

namespace
Mecanisme d'espais de noms introduït a PHP 5.3+ per evitar conflictes de noms de classe. Aquesta eina genera automàticament segons namespace configurat per usuari i organitza al ZIP per directori App/Models/.
class
Plantilla que defineix objectes a PHP. Aquesta eina genera class PHP estàndard, instanciable directament mitjançant new User(...).
ArrayObject
Classe a la biblioteca estàndard SPL de PHP que implementa interfícies com ArrayAccess. Classes generades en estil ArrayObject per aquesta eina hereten de \ArrayObject, suportant accés doble estil array i objecte.
stdClass
Classe d'objecte genèric integrada de PHP; json_decode($json, false) retorna aquest tipus per defecte. Classes generades en estil stdClass per aquesta eina hereten de \stdClass, suporten només accés estil objecte.
typed properties
Declaracions de tipus de propietat introduïdes a PHP 7.4+ (ex. public int $id). Les propietats generades per aquesta eina tenen declaracions de tipus per defecte; l'IDE i les eines d'anàlisi estàtica poden fer comprovació de tipus directament.
readonly class
Classe de només lectura introduïda a PHP 8.1+; totes les propietats de la classe són automàticament readonly, no modificables després de construcció. Aquesta eina genera final readonly class en estil readonly, adequada per a escenaris DTO immutables.
JsonSerializable
Interfície introduïda a PHP 5.4+; els objectes que implementen aquesta interfície criden automàticament el mètode jsonSerialize() durant json_encode(). Totes les classes d'aquesta eina implementen automàticament aquesta interfície.
Jsonable (Laravel)
Interfície de contracte del framework Laravel; després d'implementació, l'objecte pot cridar toJson() per retornar JSON. L'estil integració Laravel d'aquesta eina implementa automàticament aquesta interfície.
Arrayable (Laravel)
Interfície de contracte del framework Laravel; després d'implementació, l'objecte pot cridar toArray() per retornar array. L'estil integració Laravel d'aquesta eina implementa automàticament aquesta interfície.
Composer
Eina oficial de gestió de dependències de PHP. Quan utilitzis el codi generat per aquesta eina, cal configurar autoload PSR-4 a composer.json (ex. App\\: src/).
PSR-4
Estàndard d'autoload especificat per PHP-FIG, que carrega fitxers de classe mitjançant mapping de namespace a directori. El paquet ZIP generat per aquesta eina està organitzat per camí namespace, conforme a l'estàndard PSR-4.
Symfony Serializer
Framework de serialització del component Symfony. Classes generades en estil ArrayObject per aquesta eina poden col·laborar amb PropertyNormalizer de Symfony Serializer per a serialització i deserialització profundes.
Eloquent API Resource
Classe de recursos API de Laravel Eloquent, utilitzada per formatar respostes API. Classes generades en estil integració Laravel per aquesta eina es poden utilitzar directament com a classes base API Resource.
composer.json
Fitxer de configuració del projecte Composer. Després de col·locar el codi generat per aquesta eina al directori src, cal configurar secció autoload a composer.json i executar composer dump-autoload.
json_encode / json_decode
Funcions integrades de serialització i deserialització JSON de PHP. Després que classes generades per aquesta eina implementin JsonSerializable, json_encode() crida automàticament el mètode jsonSerialize().
PHPUnit DataProvider
Mecanisme de proveïdor de dades del framework de tests PHPUnit. Classes PHP generades per aquesta eina es poden injectar en cas de test com a DataProvider, millorant l'eficiència d'escriptura de tests amb autocompletat IDE.
PHPStan
Eina d'anàlisi estàtica per a PHP, pot fer comprovació de tipus, detecció d'errors en codi. Classes generades per aquesta eina, en tenir typed properties, poden tenir tipus de propietat completament inferits per PHPStan en mode --level=8.
Psalm
Una altra eina d'anàlisi estàtica per a PHP, open-source de Vimeo. Classes generades per aquesta eina, amb PropertyTypeProvider de Psalm, poden fer validació de tipus forta.
Doctrine
Conjunt d'eines ORM i DBAL en l'ecosistema PHP. Classes PHP generades per aquesta eina poden servir d'esquelet per a Doctrine Entity, després afegir manualment anotacions com #[ORM\Column].
php -l
Directiva de comprovació de sintaxi a la línia d'ordres PHP. Classes generades per aquesta eina poden primer executar php -l User.php per a validació de sintaxi abans de requerir en projecte.
Composer dump-autoload
Ordre per fer que Composer regeneri l'índex d'autoload. Després de col·locar classes generades per aquesta eina al directori src, cal executar composer dump-autoload per ser reconegudes per autoload PSR-4.
JSON_THROW_ON_ERROR
Flag per a gestió d'errors de json_decode() a PHP 7.3+; en activar-se, l'anàlisi JSON fallida llança excepció JsonException. L'exemple Laravel d'aquesta eina utilitza anàlisi rigorosa.
Hash (PHP)
Funció de hash integrada de PHP, comunament utilitzada per a verificació de signatura WebHook. Classes de callback WebHook generades per aquesta eina funcionen amb hash_hmac() per a verificació de signatura.

Taula de referència mapping de tipus JSON a tipus PHP

Tipus de dades JSON detectats automàticament per eina i referència del tipus PHP corresponent:

Exemple valor JSONMètode de deteccióTipus PHP generatValor per defecte propietat
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 buit)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>)[]
{...} (objecte imbricat)typeof value === 'object' && !Array.isArray(value)Xxx (classe independent)new Xxx()

Taula de comparació de 4 estils de codi PHP

4 estils de codi de classe PHP suportats per l'eina; tria segons necessitats del projecte:

Estil de codiEstén / ModificadorImplementa interfícieCas d'ús
Estil ArrayObjectextends \ArrayObjectimplements \JsonSerializableEcosistema Symfony Serializer, requereix accés estil array $obj['key'], compatible amb biblioteca estàndard PHP
Estil stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, compatible amb comportament per defecte json_decode, suport de dades d'objecte lleuger
Estil readonly classfinal readonly class (sense herència)implements \JsonSerializablePHP 8.1+, DTO resposta API, objectes de transferència de dades immutables, garantir que les dades no es modifiquin després de construcció
Estil integració Laravelsense herència (per defecte)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, capa models Eloquent, formatatge de respostes de controlador

Privacy & Security

Totes les operacions d'anàlisi JSON, generació de classes PHP, empaquetat ZIP d'aquesta eina JSON a PHP s'executen completament localment al teu navegador mitjançant JavaScript (quicktype-core + JSZip); les dades JSON d'entrada i el codi PHP generat no es pugen a cap servidor, ni es desen, es posen en memòria cau o s'emmagatzemen al núvol. JSON sensible que conté camps d'interfície interna, estructures de negoci no llançades, respostes API no públiques es pot utilitzar amb seguretat; totes les dades s'esborren en tancar la pàgina. Aquesta eina no utilitza cap Cookie per a seguiment d'usuaris, no recull informació de correu electrònic o compte, no integra scripts d'estadístiques de tercers; tots els càlculs s'executen en procés de navegador del dispositiu actual. Fins i tot en entorn fora de línia (ex. desconnectat o intranet aïllada) funciona normalment, sempre que els recursos de la pàgina s'hagin carregat una vegada.

Authoritative References