logo
GeekFormat

JSON vers PHP

Outil gratuit en ligne JSON vers PHP, convertit JSON en classes PHP exécutables directement en un clic. Prend en charge deux styles ArrayObject et stdClass, génère automatiquement namespace, typed properties (PHP 7.4+), readonly class optionnelle (PHP 8.1+), implémente JsonSerializable, objets imbriqués automatiquement divisés en classes indépendantes, tableaux automatiquement convertis en array PHP, exécution locale dans navigateur sans téléchargement nécessaire.

Recommandations connexes

À propos de JSON vers classe PHP et modélisation de classes d'entité PHP

L'outil JSON vers PHP (JSON to PHP Converter) est un utilitaire qui convertit automatiquement structures de données JSON en code de classe PHP standard. Il libère les développeurs du travail répétitif d'écrire manuellement namespace / class / propriétés public / constructeur, particulièrement adapté pour convertir rapidement JSON d'exemple dans documentation d'interface API en classes d'entité PHP qui peuvent être require directement dans projets Composer.

Cet outil prend en charge 4 styles de code principaux : ① Style ArrayObject (étend \ArrayObject, prend en charge accès tableau et objet, commun dans écosystème Laravel / Symfony Serializer) ; ② Style stdClass (étend \stdClass, uniquement accès objet, comportement par défaut WordPress / json_decode) ; ③ Style readonly class (PHP 8.1+ final readonly class, immuable après construction, adapté pour DTO) ; ④ Style intégration Laravel (implémente Jsonable + Arrayable, fonctionne avec Eloquent API Resource). Les développeurs peuvent choisir librement selon framework utilisé par le projet.

Mappage de types PHP est le cœur de JSON vers PHP. L'outil mappe types de base JSON en types standard PHP : string mappe vers string, entier vers int, float vers float, booléen vers bool, tableau vers array, objets imbriqués vers classe indépendante (première lettre du nom de champ en majuscule), null vers ?type (propriété nullable). Toutes les propriétés sont déclarées avec typed properties de PHP 7.4+, IDE peut faire vérification de types directement.

Autre point fort différenciant est 'implémenter automatiquement interface JsonSerializable' : chaque classe PHP générée implémente automatiquement \JsonSerializable et génère méthode public function jsonSerialize(): mixed { return [...] }. Cela signifie que vous pouvez faire directement echo json_encode($user) pour afficher chaîne JSON, et json_encode appellera automatiquement données du tableau retournées par jsonSerialize(). Dans Laravel avec interface Jsonable vous pouvez également directement return response()->json($user) sans aucun traitement supplémentaire.

Contrairement à certains outils en ligne qui nécessitent de télécharger JSON vers serveur pour traiter, tous les calculs de cet outil sont effectués dans le navigateur. quicktype-core est chargé et exécuté via Web Worker ; analyse JSON, inférence de types, génération de code PHP, packaging ZIP se produisent localement, n'envoient données à aucun serveur. Ceci est particulièrement important pour JSON contenant clés API, champs de confidentialité utilisateur ou structures métier non lancées ; données sont effacées de la mémoire après fermeture de page.

Le code généré doit généralement être placé dans projet Composer pour utilisation. Vous devez vous assurer que version PHP satisfait exigences dans composer.json (PHP 7.4+ prend en charge typed properties, PHP 8.1+ prend en charge readonly class), puis copier classes générées dans le répertoire src, chargement automatique via namespace (PSR-4). Ensuite vous pouvez consommer données avec json_decode($jsonString, false) ou json_decode($jsonString, true) + désérialisation, profitant des avantages du système de types PHP.

Cas d'utilisation

  • Développement backend Laravel : convertir rapidement JSON d'exemple de documentation d'interface API en classes Eloquent Model / API Resource, sérialiser réponses directement avec interfaces Jsonable / Arrayable intégrées de Laravel
  • Intégration Symfony Serializer : convertir JSON retourné par API tierces en classes PHP style ArrayObject, faire mappage d'objets profond et validation de données avec Symfony Serializer
  • WordPress REST API : convertir structure JSON retournée par endpoint personnalisé en classes PHP style stdClass, sortie directe avec wp_send_json(), conforme au comportement par défaut de wp_json_encode()
  • PHP 8.1+ readonly DTO : convertir JSON en final readonly class pour objets de transfert de données (DTO), immuables après construction, évitant que logique métier ne modifie accidentellement données de réponse
  • Développement de paquets Composer : convertir JSON Schema en classes PHP puis publier sur Packagist comme couche modèle SDK, pour que autres projets Composer le require et réutilisent
  • Fixture de tests unitaires : convertir fixture JSON en classes PHP puis utiliser json_decode + désérialisation pour tests basés sur données, assertion de champs structurés
  • Scripts de migration de données : convertir fichiers de configuration JSON en classes PHP puis les utiliser pour accès fortement typé en logique métier, plus facile complétion automatique IDE et vérification de types que accès tableau
  • Intégration Frontend Mock : backend convertit d'abord modèles JSON en classes PHP, frontend obtient simultanément la TypeScript interface / PHP class correspondante, maintenant types cohérents aux deux extrémités
  • Revue de code : convertir JSON retourné par API directement en classes PHP lisibles, facilitant discussion de nommage de champs, visibilité de propriétés pendant Code Review
  • Refactorisation de projets legacy : refactoriser code d'accès dynamique basé sur tableau associatif en accès fortement typé basé sur classe PHP, faire analyse statique avec PHPStan / Psalm
  • Fournisseur de données PHPUnit : convertir données de test JSON en classes PHP puis injecter dans cas de test via DataProvider, IDE suggère automatiquement champs de propriétés
  • Intégration API backend snake_case : API backend retourne champs snake_case, système PHP frontend active 'convertir en camelCase' + style ArrayObject pour intégration transparente
  • Analyse statique PHPStan : classes générées ont naturellement déclarations de types, avec phpstan analyse --level=8 intercepter erreurs de type en CI
  • Enseignement et formation : dans scénarios d'enseignement PHP, convertir JSON d'exemple en classes PHP pour démontrer modélisation orientée objet, système de types, implémentation d'interfaces
  • Couche passerelle API Gateway : convertir JSON retourné par microservices en amont en classes PHP pour agrégation en couche passerelle, services PHP en aval consomment fortement typés par propriétés de classe
  • Consommation de files de messages : convertir corps de messages JSON consommés de RabbitMQ / Kafka en classes PHP puis stocker ou réexpédier, analyse stricte avec JSON_THROW_ON_ERROR
  • Modélisation SKU / SPU e-commerce : convertir structure JSON de produit (multi-spécifications / multi-images / multi-attributs) en classes PHP, avec style ArrayObject faire optimisation de requêtes N+1 dans Laravel
  • Vérification de signature de callback WebHook : convertir structure de vérification de signature JSON de passerelles de paiement, callbacks logistiques en classes PHP, vérification de signature avec hash_hmac()
  • Chaîne d'outils OpenAPI : convertir schema JSON d'OpenAPI 3.x en classes PHP, intégrer avec flux de génération client PHP de Swagger Codegen / Apifox
  • Pipeline ETL de données : convertir JSON de sources de données en amont (champ JSON MySQL / MongoDB / Elasticsearch) en classes PHP puis nettoyage de données et stockage

Comment utiliser

  1. Collez objet JSON (recommandé) ou tableau dans éditeur gauche, ou cliquez sur 'Sample' pour charger exemple en chinois (avec address / company / tags imbriqués)
  2. Cliquez sur bouton 'Settings' dans barre d'outils, dans boîte de dialogue sélectionnez : ① définir nom de classe racine (ex. User) et namespace (ex. App\Models) ; ② sélectionner style de code (ArrayObject / stdClass / readonly class) ; ③ sélectionner fonctionnalités de code (typed properties / intégration Laravel / Symfony Serializer) ; ④ sélectionner stratégie de nommage de champs (conserver original / camelCase / tout en minuscules / UPPER_SNAKE)
  3. Outil convertira automatiquement en 400ms, droite affiche toutes les classes PHP générées (chaque classe une carte indépendante, barre de titre affiche badge de style actuel en temps réel) ; si JSON a erreur de format affichera bouton 'Réparer JSON'
  4. Vérifiez que noms de classe générés, noms de propriétés et interfaces répondent aux attentes ; si ajustement nécessaire pouvez modifier noms de clé du JSON source ou rouvrir Settings pour modifier options
  5. Quand satisfait pouvez cliquer sur bouton 'Copier' de classe individuelle pour coller dans IDE, ou cliquer sur 'Download ZIP' dans barre d'outils pour télécharger toutes les classes en un clic (structure de répertoires organisée par chemin namespace)

Fonctionnalités

  • Deux styles de code commutables librement : ArrayObject (étend \ArrayObject, prend en charge accès style tableau $obj['key']) / stdClass (étend \stdClass, prend en charge accès style objet $obj->key), compatible avec différents scénarios comme sérialisation Laravel, WordPress REST, Symfony Serializer
  • Modèle PHP complet : génère automatiquement déclaration namespace + instructions use + commentaire d'en-tête de classe (Copyright + horodatage de génération) + définition de classe + propriétés publiques typées (PHP 7.4+), peut être require directement dans projet Composer sans compléter manuellement le boilerplate
  • Interface JsonSerializable implémentée automatiquement : chaque classe génère automatiquement public function jsonSerialize(): mixed { return [...] }, sérialise JSON directement avec json_encode(), zéro code boilerplate supplémentaire
  • PHP 8.1+ readonly class optionnelle : à l'activation, la classe générée ajoute final readonly class, toutes les propriétés sont readonly, immuables après construction, adapté aux scénarios DTO de réponse API immuables
  • Inférence de types intelligente : string → string, integer → int, float → float, bool → bool, array → array, objets imbriqués → classe indépendante, null → ?type (propriété nullable), sans spécification manuelle des types de champ
  • Classes imbriquées divisées automatiquement : objets imbriqués génèrent classes PHP indépendantes avec première lettre du nom de champ en majuscule (ex. address → Address), objets dans tableaux nommés selon règle 'supprimer s final' (ex. users → User), toutes les classes imbriquées implémentent également JsonSerializable
  • 4 stratégies de nommage de champs : conserver original / snake_case vers camelCase (user_name → userName) / tout en minuscules / style constante UPPER_SNAKE, conformes aux différentes normes de code PSR-1 / Laravel / Symfony
  • Intégration Laravel en un clic : en cochant, implémente automatiquement interfaces Jsonable, Arrayable, ajoute méthodes toArray() / toJson(), peut être utilisé directement comme Eloquent API Resource, avec chargement automatique Composer
  • Copier classe individuelle + téléchargement multi-fichiers ZIP : chaque classe PHP a bouton 'Copier' indépendant, peut télécharger en un clic paquet ZIP organisé par structure de répertoires namespace (ex. App/Models/User.php), décompresser et utiliser
  • Exécution locale dans navigateur + historique : analyse JSON, génération de classes PHP, packaging ZIP effectués dans navigateur via JavaScript (quicktype-core + JSZip), données non téléchargées vers aucun serveur ; historique localStorage intégré pour 200 entrées récentes

Exemples de code

PHP : Sérialiser classes générées par cet outil avec json_encode()

php

Classes PHP générées par cet outil implémentent interface JsonSerializable par défaut, affichent JSON directement avec json_encode() sans aucun traitement supplémentaire.

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// Simuler chaîne JSON reçue d'API
$jsonString = '{"id":1,"name":"Alice","email":"a****@***********","isActive":true}';

// 1) Désérialiser en classe générée par cet outil
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) Accès aux champs fortement typé (complétion automatique IDE + vérification statique PHPStan)
echo $user->name;          // Alice
echo $user->email;         // a****@***********
echo $user->isActive ? 'Actif' : 'Désactivé'; // Actif

// 3) json_encode() appelle automatiquement jsonSerialize(), aucun code supplémentaire nécessaire
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "a****@***********",
    "isActive": true
}
*/

PHP : Exemple d'intégration Laravel API Resource

php

Après avoir coché l'intégration Laravel, les classes générées par cet outil peuvent être utilisées directement comme Eloquent API Resource, formatant les réponses avec 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'intégration Symfony Serializer

php

Les classes générées en style ArrayObject par cet outil peuvent fonctionner avec le composant Symfony Serializer pour une sérialisation et désérialisation profonde, adaptées aux couches de passerelle 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

Pour la plupart des projets backend PHP, les classes générées en style ArrayObject prennent en charge à la fois l'accès tableau ($obj['key']) et l'accès objet ($obj->key) ; avec l'interface JsonSerializable implémentée par défaut, json_encode() appelle automatiquement le tableau retourné par jsonSerialize(). C'est le motif de support de données objet le plus universel dans l'écosystème PHP, compatible avec presque tous les frameworks mainstream comme Laravel, Symfony, CodeIgniter.

La classe readonly introduite en PHP 8.1+ est la meilleure pratique pour les DTO : propriétés immuables après construction, empêchant la logique métier de modifier accidentellement les données de réponse ; la promotion de constructeur rend le code plus concis (public function __construct(public int $id, public string $name) {} une ligne pour les déclarations de propriétés). Nous recommandons de passer les DTO de réponse API, structures de rappel WebHook, modèles clients API tiers au style readonly class.

Les champs de base de données Laravel sont par défaut en snake_case, mais les propriétés PHP recommandent camelCase. La stratégie 'Convertir en camelCase' de cet outil convertit automatiquement, tandis que les clés du tableau return de jsonSerialize() conservent le snake_case original ; la sortie json_encode() reste en snake_case. Cela respecte à la fois les habitudes d'accès au modèle Laravel et maintient la compatibilité API.

Les packages ZIP générés sont organisés par chemin namespace (ex. App/Models/User.php). Configurez la section autoload.psr-4 dans composer.json, par exemple : "App\\": "src/", puis exécutez composer dump-autoload. Ainsi Composer mappera automatiquement App\Models\User à src/Models/User.php sans require manuel.

Cet outil génère par défaut des propriétés typées (PHP 7.4+), dont les types de propriétés peuvent être entièrement inférés par PHPStan en mode --level=8. Nous recommandons d'intégrer phpstan analyse ./src --level=8 dans le pipeline CI pour intercepter les erreurs de type. Psalm prend également en charge PropertyTypeProvider pour une validation de type fort.

Cet outil s'exécute complètement localement dans le navigateur et ne téléverse aucune donnée. Mais prenez l'habitude : ① désensibiliser les JSON contenant des clés API / tokens / vie privée utilisateur avant conversion ; ② s'assurer que la connexion réseau est coupée lors de l'utilisation de cet outil pour de grandes structures métier internes (interfaces non publiées) ; ③ ne pas commiter de données d'exemple contenant des informations sensibles dans des dépôts publics après génération de code.

Les objets JSON imbriqués génèrent récursivement des classes PHP indépendantes. Si les niveaux d'imbrication JSON dépassent 6 couches (ex. menus multi-niveaux imbriqués, organigrammes, documents métier complexes), le nombre de classes générées explose (N classes imbriquées par couche), l'IDE se charge lentement et la maintenance devient difficile. Recommandations : ① diviser JSON en plusieurs modules et convertir séparément ; ② ou après génération refactoriser manuellement en indexation tableau ($user['profile']['address']['city']) au lieu de l'imbrication de classes.

Les valeurs null JSON sont par défaut inférées comme ?mixed (mixed nullable), ce qui est un repli sûr mais pas un type précis. Si le type de champ est connu (ex. "nickname": "" infère string), donnez d'abord une valeur d'exemple dans le JSON source, après génération supprimez la valeur d'exemple puis changez en type précis comme ?string, améliorant significativement la précision de l'analyse statique PHPStan.

FAQ

Comment convertir JSON en classe PHP ?

Collez contenu JSON dans la zone de saisie gauche, l'outil convertira automatiquement en 400ms ; ou cliquez sur bouton 'Convert' dans la barre d'outils. Après conversion, la droite affiche toutes les classes PHP générées, chaque classe a bouton 'Copier' indépendant ; cliquez sur 'Download ZIP' dans barre d'outils pour empaqueter et télécharger toutes les classes en un clic (y compris structure de répertoires namespace).

Quelles structures de données JSON sont prises en charge ?

Prend en charge deux structures : ① Objet JSON (comme classe racine, génère automatiquement class RootClass) ; ② Tableau JSON (premier objet du tableau comme modèle de classe racine). Tous les objets imbriqués sont traités récursivement en classes indépendantes ; les objets dans tableaux sont traités récursivement en classes correspondant au type d'élément du tableau.

Que contiennent les classes PHP générées ?

Chaque fichier .php généré contient : ① commentaire d'en-tête de fichier (Copyright + horodatage généré automatiquement) ; ② déclaration namespace ; ③ instructions use (incluant \JsonSerializable / \ArrayAccess etc. importés automatiquement selon besoin) ; ④ définition de classe (ArrayObject / stdClass / readonly class selon paramètres) ; ⑤ implémente interfaces (JsonSerializable / Jsonable / Arrayable selon paramètres) ; ⑥ propriétés publiques typées (PHP 7.4+) ; ⑦ constructeur (assignation de toutes les propriétés générée selon paramètres) ; ⑧ méthodes jsonSerialize() / toArray() / toJson() etc. Complètement prêt pour vérification syntaxique php -l et utilisation require.

Quelle est la différence entre les styles ArrayObject et stdClass ?

Style ArrayObject : classe générée étend \ArrayObject, prend en charge à la fois accès style tableau $obj['key'] et accès style objet $obj->key, retourne objet lors de json_encode(). Style stdClass : classe générée étend \stdClass, prend uniquement en charge accès style objet $obj->key, plus légère mais pas d'accès tableau direct. L'écosystème Laravel / WordPress utilise style stdClass par défaut (comportement par défaut de json_decode), Symfony Serializer utilise style ArrayObject par défaut.

Prend-il en charge la génération de Laravel API Resource ?

Oui. Après avoir coché option 'Intégration Laravel en un clic' dans paramètres, l'outil génère automatiquement implémente interfaces Jsonable, Arrayable, ajoute méthodes toJson($options = 0) et toArray(), les classes générées peuvent être utilisées directement dans Eloquent API Resource (comme new UserResource($user) ou $user->toArray()). Utilise également automatiquement Illuminate\Contracts\Support\Jsonable et Illuminate\Contracts\Support\Arrayable.

À quoi ressemble le code généré en mode PHP 8.1 readonly class ?

Après activation de readonly class, les classes PHP générées sont simplifiées de manière significative. Par exemple, class User avec readonly activé a environ 12 lignes : final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } }. Toutes les propriétés sont déclarées readonly via promotion de propriétés de constructeur (constructor property promotion), immuables après construction. Note : le projet nécessite PHP 8.1+, les champs readonly ne peuvent être assignés que via constructeur.

Comment convertir noms de champs snake_case en camelCase ?

Dans le groupe 'Stratégie de nommage de champs' de la boîte de dialogue Settings, sélectionnez mode 'Convertir en camelCase', l'outil convertira automatiquement noms de champs JSON de snake_case au style de nommage recommandé par PHP. Par exemple user_name → userName, created_at → createdAt, is_active → isActive. De plus si JSON provient de liaison de route Laravel, propriétés de classe sont accessibles directement via $request->userName sans conversion intermédiaire manuelle.

Comment les objets JSON imbriqués sont-ils traités ?

L'outil crée automatiquement classes PHP indépendantes pour objets imbriqués. Règle de nommage : clé d'objet imbriqué avec première lettre en majuscule comme nom de classe (ex. address → Address), clé d'objet dans tableaux en supprimant s final puis première lettre en majuscule (ex. users → User). Toutes les classes imbriquées incluent également champs complets, constructeur, méthode jsonSerialize(), namespace cohérent avec classe racine, peuvent être importées via use App\Models\Address.

En quoi les champs tableau sont-ils convertis automatiquement ?

Oui. Les champs tableau dans JSON sont automatiquement convertis en propriétés PHP array, type d'élément inféré automatiquement du premier élément du tableau. Par exemple ["a","b","c"] → array (annoté array<string> en commentaire) ; [{...},{...}] → array (annoté array<User> en commentaire, User est nouvelle classe nommée depuis clé) ; tableau vide [] par défaut array (annoté array<mixed> en commentaire). PHP 8.0+ avec annotations PHPDoc peut obtenir suggestions de type dans IDE.

Comment modifier nom de classe racine et namespace ?

Il y a un bouton Settings dans le coin supérieur droit de la barre d'outils, cliquez pour ouvrir boîte de dialogue de configuration, peut configurer : ① nom de classe racine (par défaut JsonRootClass) ; ② namespace (par défaut App\Models). Après modification, tous les noms de classe générés sont mis à jour de manière synchrone, structure de répertoires dans ZIP également organisée par namespace (ex. App/Models/User.php).

Le téléchargement est-il un seul fichier .php ou paquet ZIP ?

Le téléchargement est paquet ZIP (User.zip), contenant toutes les classes PHP générées, organisées en structure de répertoires par chemin namespace. Par exemple quand namespace est App\Models, structure de fichiers dans ZIP : App/Models/User.php, App/Models/Address.php, App/Models/Company.php etc. Peut être importé directement dans le répertoire src de projet Composer via commande unzip ou IDE.

Peut-on copier une classe individuelle directement dans l'IDE ?

Oui. Chaque classe PHP générée s'affiche comme une carte indépendante, coin supérieur droit de carte a bouton 'Copier', en cliquant tout le code complet de la classe (incluant <?php + namespace + use + classe + propriétés + constructeur + méthodes) est copié dans le presse-papiers, peut être collé directement dans IDE comme PhpStorm / VS Code / Sublime.

Comment faire pour que les classes générées implémentent l'interface JsonSerializable ?

Activé par défaut. Toutes les classes PHP générées implémentent automatiquement \JsonSerializable et génèrent méthode public function jsonSerialize(): array { return [...] }, tableau de retour assemblé dans l'ordre des propriétés de classe. Vous pouvez faire directement echo json_encode($user) pour afficher chaîne JSON, ou dans Laravel return response()->json($user).

Symfony Serializer peut-il utiliser les classes générées par cet outil ?

Oui. Symfony Serializer lit les données en style tableau par défaut, bien compatible avec classes générées en style ArrayObject. Avec $serializer->serialize($user, 'json') de SerializerInterface peut sérialiser directement ; lors de la désérialisation avec deserialize() la classe a besoin de propriétés publiques ou getter. Cet outil génère style propriétés publiques + assignation par constructeur, peut être utilisé directement avec PropertyNormalizer de Symfony Serializer.

Que faire si JSON a erreurs de format ?

L'outil détecte automatiquement validité JSON, en cas d'erreur affiche avertissement d'erreur rouge à droite et fournit bouton 'Réparer JSON'. En cliquant peut réparer automatiquement erreurs courantes : ① virgules superflues à la fin ; ② guillemets simples remplacés par guillemets doubles ; ③ compléter guillemets pour clés sans guillemets ; ④ suppression de commentaires. Après réparation réussie peut convertir directement pour générer classes PHP.

Données téléchargées vers serveur ? Privé et sécurisé ?

Exécution complètement locale dans navigateur. Toute analyse JSON, génération de classes PHP, packaging ZIP effectués dans votre navigateur via JavaScript (quicktype-core + JSZip), données JSON d'entrée et code PHP généré ne sont téléchargés vers aucun serveur, ni enregistrés ou mis en cache dans le cloud. JSON sensible contenant champs d'interface internes, structures métier non lancées, réponses API non publiques peut être utilisé en toute sécurité, effacé à la fermeture de page.

Générer un JSON volumineux de 10 000 lignes causera-t-il un ralentissement ?

Outil n'a pas de limite explicite de lignes, mais l'analyse et le rendu de JSON très volumineux par navigateur seront plus lents. Recommandations : ① diviser JSON puis convertir par lots ; ② se concentrer sur un niveau d'imbrication à la fois ; ③ si vous devez générer par lots 100+ classes, recommandons d'utiliser directement plugins de modèle PHP de l'IDE ou écrire un script CLI quicktype simple.

Les classes PHP générées prennent-elles en charge versions antérieures à PHP 7.4 ?

Pas complètement. Les classes générées par cet outil utilisent par défaut typed properties de PHP 7.4+ (ex. public int $id). Si votre projet est encore PHP 7.0~7.3, déclarations de type causeront problèmes de compatibilité. Recommandations : ① mettre à niveau projet vers PHP 8.1+ (recommandé, meilleures performances et système de types) ; ② ou supprimer déclarations de type par lots dans IDE après génération (Find & Replace `public int ` → `public `) ; ③ ou utiliser mode compatible PHP 7.4 (PHP 7.4 est la ligne de base de cet outil).

Dépannage

Affiche 'Veuillez saisir données JSON' ou droite vide

Zone de saisie gauche est vide ou contient uniquement espaces blancs. Assurez-vous d'avoir collé contenu JSON valide, ou cliquez sur 'Sample' pour charger exemple en chinois, ou cliquez sur 'Upload' pour sélectionner fichiers .json / .txt.

Affiche 'Unexpected token ... in JSON à la position N'

Format JSON invalide. Causes courantes : ① virgule supplémentaire en fin (ex. {"a":1,}) ; ② guillemets simples utilisés au lieu de guillemets doubles ; ③ notation objet JS (ex. {key: value}) au lieu de JSON (ex. {"key": "value"}). Cliquez sur le bouton 'Réparer JSON' pour corriger automatiquement certaines erreurs.

Code généré erreur dans projet PHP 7.x avec 'Typed property must not be accessed before initialization'

Les classes générées par cet outil utilisent par défaut les propriétés typées PHP 7.4+ (ex. public int $id). Si votre projet est encore en PHP 7.0~7.3, les déclarations de type causent des problèmes de compatibilité. Solutions : ① mettre à niveau le projet vers PHP 8.1+ (recommandé, meilleures performances et système de types) ; ② supprimer par lot les déclarations de type dans l'IDE (Rechercher & Remplacer `public int ` → `public `) ; ③ décocher l'option 'Propriétés typées PHP 7.4' (efficace seulement pour certains styles de code).

Classe readonly PHP 8.1 erreur 'Cannot modify readonly property'

Les propriétés générées en style readonly class ne peuvent pas être modifiées après construction. Si vous essayez $user->name = 'Bob' une erreur se produira. Solutions : ① passer au style ArrayObject ou stdClass (propriétés modifiables) ; ② ou créer une nouvelle instance avec new User(...) au lieu de modifier.

Impossible de trouver Illuminate\Contracts\Support\Jsonable dans projet Laravel

Le style d'intégration Laravel nécessite la dépendance laravel/framework. Assurez-vous dans composer.json d'avoir : "require": { "php": "^8.1", "laravel/framework": "^11.0" }. Puis exécutez composer update pour installer les dépendances. Si vous n'utilisez pas Laravel, veuillez choisir le style ArrayObject ou stdClass.

Échec désérialisation Symfony Serializer 'Cannot denormalize object'

Causes courantes : ① la classe générée n'a pas de propriétés publiques ou de méthodes getter (Symfony Serializer utilise PropertyNormalizer par défaut) ; ② la classe n'a pas de constructeur sans paramètre mais a des paramètres obligatoires. Solutions : ① confirmer que cet outil a généré des propriétés publiques ; ② construire manuellement l'objet via la méthode statique fromArray() puis le passer au Serializer.

Nom de classe d'objet imbriqué non attendu (ex. categories nommé Categori)

L'outil utilise la règle de nommage 'supprimer le s final + capitaliser' pour les objets dans les tableaux ; pour les pluriels irréguliers comme categories ce n'est pas convivial. Recommandations : ① changer la clé JSON source en singulier (ex. categories → category) ; ② ou après génération utiliser Renommer de l'IDE pour renommer la classe (modifiant toutes les références simultanément).

Structure de répertoires ZIP incorrecte après extraction

Les répertoires dans le ZIP sont organisés selon le paramètre namespace (par défaut App/Models/). Si position incorrecte après extraction : ① modifier le nom namespace (ex. en App\Dto) et retélécharger ; ② spécifier le répertoire d'extraction avec unzip -d src/ ; ③ ou directement dans IDE Fichier → Ouvrir tout le dossier extrait.

Classes générées ne se chargent pas automatiquement

Les projets Composer nécessitent une configuration de mappage d'autoload PSR-4 dans composer.json, par exemple : "autoload": { "psr-4": { "App\\": "src/" } }. Puis exécutez composer dump-autoload ; Composer chargera automatiquement les fichiers de classe par mappage namespace-vers-répertoire.

Nom de champ changé après conversion snake_case vers camelCase

'Convertir en camelCase' change les noms de propriétés PHP (ex. user_name → userName), mais les clés du tableau return de la méthode jsonSerialize() restent en snake_case original ; le JSON généré par json_encode() a toujours les noms de champ originaux. Donc pour accéder à la propriété PHP utilisez $user->userName, la sortie JSON est toujours {"user_name": "..."}. Si vous voulez aussi un accès camelCase lors de la désérialisation, vous devez changer les clés en camelCase dans le tableau return de jsonSerialize().

Page ralentit lors de la génération de 100+ classes imbriquées

L'outil n'a pas de limite explicite de nombre de classes, mais les performances de rendu DOM très volumineux du navigateur diminuent significativement. Recommandations : ① diviser JSON en plusieurs modules indépendants et convertir séparément ; ② ou utiliser directement l'outil de génération de code intégré à l'IDE (ex. plugin JSON to PHP de PhpStorm) ; ③ il est recommandé que les niveaux d'imbrication ne dépassent pas 6 couches, sinon il est recommandé de refactoriser la structure JSON.

Tableau est de type numérique mais génère array<int> au lieu de array<float>

L'outil infère le type selon le premier élément du tableau (ex. [1, 2, 3] infère int, [1.5, 2.5] infère float). Si vous mélangez entiers et flottants (ex. [1, 2.5]), l'outil inférera selon le premier élément. Solutions : ① ajouter au moins un élément flottant d'exemple dans le JSON source (ex. [0.0, 1.5]) ; ② ou ajuster manuellement le type dans l'annotation PHPDoc après génération.

Champ valeur null généré comme type ?mixed au lieu de ?string

Les valeurs null JSON sont inférées par défaut comme type ?mixed par l'outil (car le type réel ne peut pas être déterminé). C'est une pratique sûre évitant les erreurs de jugement. Si le type est connu, donnez une valeur d'exemple à ce champ dans le JSON source (ex. "field": "" infère string), après génération changez le type en ?string.

Après composer dump-autoload la classe ne se charge toujours pas automatiquement

Causes possibles : ① namespace ne correspond pas au répertoire (ex. namespace App\Models mais fichier dans src/Dto/) ; ② le mappage psr-4 de composer.json est mal écrit (ex. "App\\": "src/Dto/" devrait être "App\\Dto\\": "src/Dto/"). Solutions : vérifier que le namespace de chaque fichier .php correspond strictement au chemin du répertoire (les segments namespace doivent être égaux aux segments de répertoire, sensible à la casse).

PHPStan signale 'Property does not have default value'

Les propriétés typées générées n'ont pas de valeur par défaut ; PHPStan en mode --level=8 considère qu'elles pourraient ne pas être initialisées. Solutions : ① désactiver les règles strictes de PHPStan ; ② assigner des valeurs vides dans le constructeur (ex. $this->tags = []) ; ③ utiliser le style readonly class (assigné immédiatement après promotion du constructeur).

Échec désérialisation tableau d'objets Symfony Serializer

Pour les tableaux d'objets comme [{...},{...}], PropertyNormalizer a besoin d'indications de type d'élément. Solutions : ① spécifier explicitement le type array<User> dans PHPDoc ; ② ou envelopper avec ArrayCollection ($users = new ArrayCollection()).

Clés chinoises génèrent noms de propriété PHP avec caractères spéciaux

Lorsque le JSON source contient des clés chinoises (ex. "姓名": "Alice"), l'outil générera une propriété public string $姓名 ; l'IDE peut signaler que la nomenclature n'est pas standard mais aucune erreur ne se produira. Recommandations : ① changer les clés JSON en anglais (plus conforme à la nomenclature PSR-1 de PHP) ; ② en conservant le chinois assurez-vous que l'encodage du fichier PHP est UTF-8 (PHP est UTF-8 par défaut).

Style ArrayObject $obj['key'] vs $obj->key ordre de sortie incohérent

L'accès tableau en style ArrayObject retourne dans l'ordre de déclaration de propriété, l'accès objet retourne dans l'ordre du tableau return de la méthode jsonSerialize(). Si les deux ordres sont incohérents, la sortie de echo json_encode() sera incohérente avec var_dump($obj). Recommandation : maintenir l'ordre return de jsonSerialize() cohérent avec l'ordre des paramètres du constructeur.

ID numérique dans JSON de rappel WebHook dépasse PHP_INT_MAX

L'int de PHP sur les systèmes 64 bits est un entier signé 64 bits (valeur maximale 9223372036854775807) ; si l'ID numérique dans JSON dépasse cette plage (ex. IDs flocon de neige Twitter), il sera tronqué. Solutions : ① recevoir l'ID en type chaîne ("id": "1234567890123456789") ; ② analyser avec l'indicateur JSON_BIGINT_AS_STRING.

Glossaire

namespace
Mécanisme d'espaces de noms introduit dans PHP 5.3+ pour éviter conflits de noms de classe. Cet outil génère automatiquement selon namespace configuré par utilisateur et organise dans ZIP par répertoire App/Models/.
class
Modèle définissant objets dans PHP. Cet outil génère class PHP standard, instanciable directement via new User(...).
ArrayObject
Classe dans bibliothèque standard SPL de PHP qui implémente interfaces comme ArrayAccess. Classes générées en style ArrayObject par cet outil héritent de \ArrayObject, prenant en charge accès double style tableau et objet.
stdClass
Classe d'objet générique intégrée de PHP ; json_decode($json, false) retourne ce type par défaut. Classes générées en style stdClass par cet outil héritent de \stdClass, prennent uniquement en charge accès style objet.
typed properties
Déclarations de type de propriété introduites dans PHP 7.4+ (ex. public int $id). Propriétés générées par cet outil ont déclarations de type par défaut ; IDE et outils d'analyse statique peuvent faire vérification de types directement.
readonly class
Classe en lecture seule introduite dans PHP 8.1+ ; toutes les propriétés dans classe sont automatiquement readonly, non modifiables après construction. Cet outil génère final readonly class en style readonly, adapté aux scénarios DTO immuables.
JsonSerializable
Interface introduite dans PHP 5.4+ ; objets implémentant cette interface appellent automatiquement méthode jsonSerialize() lors de json_encode(). Toutes les classes de cet outil implémentent automatiquement cette interface.
Jsonable (Laravel)
Interface de contrat du framework Laravel ; après implémentation, objet peut appeler toJson() pour afficher JSON. Style intégration Laravel de cet outil implémente automatiquement cette interface.
Arrayable (Laravel)
Interface de contrat du framework Laravel ; après implémentation, objet peut appeler toArray() pour afficher tableau. Style intégration Laravel de cet outil implémente automatiquement cette interface.
Composer
Outil officiel de gestion de dépendances de PHP. Lors de l'utilisation de code généré par cet outil, nécessaire de configurer chargement automatique PSR-4 dans composer.json (ex. App\\: src/).
PSR-4
Norme de chargement automatique spécifiée par PHP-FIG, chargeant fichiers de classe via mappage namespace vers répertoire. Paquet ZIP généré par cet outil est organisé par chemin namespace, conforme à la norme PSR-4.
Symfony Serializer
Framework de sérialisation du composant Symfony. Classes générées en style ArrayObject par cet outil peuvent fonctionner avec PropertyNormalizer de Symfony Serializer pour sérialisation et désérialisation profondes.
Eloquent API Resource
Classe de ressources API de Laravel Eloquent, utilisée pour formater réponses API. Classes générées en style intégration Laravel par cet outil peuvent être utilisées directement comme classes de base API Resource.
composer.json
Fichier de configuration de projet Composer. Après avoir placé code généré par cet outil dans répertoire src, nécessaire de configurer section autoload dans composer.json et exécuter composer dump-autoload.
json_encode / json_decode
Fonctions intégrées de sérialisation et désérialisation JSON de PHP. Après que classes générées par cet outil implémentent JsonSerializable, json_encode() appelle automatiquement méthode jsonSerialize().
PHPUnit DataProvider
Mécanisme de fournisseur de données du framework de tests PHPUnit. Classes PHP générées par cet outil peuvent être injectées dans cas de test comme DataProvider, améliorant efficacité d'écriture de tests avec complétion automatique IDE.
PHPStan
Outil d'analyse statique PHP, peut faire vérification de types, détection d'erreurs sur code. Classes générées par cet outil, en ayant typed properties, peuvent avoir types de propriété complètement inférés par PHPStan en mode --level=8.
Psalm
Autre outil d'analyse statique PHP, open-source par Vimeo. Classes générées par cet outil, avec PropertyTypeProvider de Psalm, peuvent faire validation de types forte.
Doctrine
Ensemble d'outils ORM et DBAL de l'écosystème PHP. Classes PHP générées par cet outil peuvent servir de squelette pour Doctrine Entity, puis ajouter manuellement annotations comme #[ORM\Column].
php -l
Directive de vérification syntaxique en ligne de commande PHP. Classes générées par cet outil peuvent d'abord exécuter php -l User.php pour validation syntaxique avant require dans projet.
Composer dump-autoload
Commande pour que Composer régénère index de chargement automatique. Après avoir placé classes générées par cet outil dans répertoire src, doit exécuter composer dump-autoload pour être reconnues par chargement automatique PSR-4.
JSON_THROW_ON_ERROR
Indicateur de gestion d'erreurs de json_decode() dans PHP 7.3+ ; à l'activation, échec d'analyse JSON lance exception JsonException. Exemple Laravel de cet outil utilise analyse stricte.
Hash (PHP)
Fonction de hachage intégrée de PHP, couramment utilisée pour vérification de signature WebHook. Classes de callback WebHook générées par cet outil fonctionnent avec hash_hmac() pour vérification de signature.

Tableau de Référence de Mappage de Type JSON vers Type PHP

Types de données JSON inférés automatiquement par outil et référence de type PHP correspondante :

Exemple Valeur JSONMéthode de DétectionType PHP GénéréValeur par Défaut Propriété
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''
[...] (tableau vide)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>)[]
{...} (objet imbriqué)typeof value === 'object' && !Array.isArray(value)Xxx (classe indépendante)new Xxx()

Tableau de Comparaison de 4 Styles de Code PHP

4 styles de code de classe PHP pris en charge par outil ; choisissez selon besoins du projet :

Style de CodeÉtend / ModificateurImplémente InterfaceCas d'Utilisation
Style ArrayObjectextends \ArrayObjectimplements \JsonSerializableÉcosystème Symfony Serializer, nécessite accès style tableau $obj['key'], compatible bibliothèque standard PHP
Style stdClassextends \stdClassimplements \JsonSerializableWordPress REST API, compatible comportement par défaut json_decode, support de données objet léger
Style readonly classfinal readonly class (pas d'héritage)implements \JsonSerializablePHP 8.1+, DTO réponse API, objets de transfert de données immuables, garantir données non modifiées après construction
Style intégration Laravelpas d'héritage (par défaut)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource, couche de modèles Eloquent, formatage de réponses de contrôleur

Privacy & Security

Toutes les opérations d'analyse JSON, génération de classes PHP, packaging ZIP de cet outil JSON vers PHP s'effectuent complètement localement dans votre navigateur via JavaScript (quicktype-core + JSZip) ; données JSON d'entrée et code PHP généré ne sont téléchargés vers aucun serveur, ni enregistrés, mis en cache ou stockés dans le cloud. JSON sensible contenant champs d'interface internes, structures métier non lancées, réponses API non publiques peut être utilisé en toute sécurité ; toutes les données sont effacées à la fermeture de page. Cet outil n'utilise aucun Cookie pour suivi utilisateur, ne collecte pas informations d'e-mail ou de compte, n'intègre aucun script de statistiques tiers ; tous les calculs s'effectuent dans processus de navigateur du dispositif actuel. Même en environnement hors ligne (ex. déconnecté ou environnement isolé intranet), fonctionne normalement tant que ressources de page ont été chargées une fois.

Authoritative References