logo
GeekFormat

JSON เป็น PHP

เครื่องมือแปลง JSON เป็น PHP ออนไลน์ฟรี แปลง JSON เป็นคลาส PHP ที่รันได้ในคลิกเดียว รองรับสไตล์ ArrayObject และ stdClass สร้าง namespace อัตโนมัติ, typed properties (PHP 7.4+), readonly class ที่เลือกได้ (PHP 8.1+), implements JsonSerializable อ็อบเจ็กต์ที่ซ้อนกันแยกเป็นคลาสอิสระอัตโนมัติ อาร์เรย์แปลงเป็น PHP array อัตโนมัติ ทำงานในเบราว์เซอร์ภายในเครื่อง ไม่ต้องอัปโหลด

คำแนะนำที่เกี่ยวข้อง

เกี่ยวกับตัวแปลง JSON เป็น PHP และการสร้างแบบจำลองเอนทิตี PHP

เครื่องมือ JSON เป็น PHP (JSON to PHP Converter) เป็นยูทิลิตี้ที่แปลงโครงสร้างข้อมูล JSON เป็นโค้ดคลาส PHP มาตรฐานโดยอัตโนมัติ ช่วยนักพัฒนาจากงานซ้ำๆ ในการเขียน namespace / class / public properties / คอนสตรักเตอร์ด้วยตนเอง เหมาะอย่างยิ่งสำหรับการแปลง JSON ตัวอย่างในเอกสารอินเทอร์เฟซ API เป็นคลาสเอนทิตี PHP ที่สามารถ require เข้าโปรเจกต์ Composer ได้โดยตรงอย่างรวดเร็ว

เครื่องมือนี้รองรับ 4 สไตล์โค้ดหลัก: ① สไตล์ ArrayObject (สืบทอด \ArrayObject รองรับการเข้าถึงแบบอาร์เรย์และแบบอ็อบเจ็กต์ ใช้กันทั่วไปในระบบนิเวศ Laravel / Symfony Serializer); ② สไตล์ stdClass (สืบทอด \stdClass รองรับเฉพาะการเข้าถึงแบบอ็อบเจ็กต์ พฤติกรรมเริ่มต้น WordPress / json_decode); ③ สไตล์ readonly class (final readonly class PHP 8.1+ ไม่เปลี่ยนรูปหลังจากสร้าง เหมาะสำหรับ DTO); ④ สไตล์การรวม Laravel (นำไปใช้ Jsonable + Arrayable ทำงานกับ Eloquent API Resource) นักพัฒนาสามารถเลือกได้อย่างอิสระตามเฟรมเวิร์กที่โปรเจกต์ใช้

การแมปประเภท PHP เป็นแกนหลักของ JSON เป็น PHP เครื่องมือแมปประเภทพื้นฐาน JSON เป็นประเภทมาตรฐาน PHP: สตริงแมปเป็น string, จำนวนเต็มแมปเป็น int, ทศนิยมแมปเป็น float, บูลีนแมปเป็น bool, อาร์เรย์แมปเป็น array, อ็อบเจ็กต์ที่ซ้อนกันแมปเป็นคลาสอิสระ (ชื่อฟิลด์ตัวพิมพ์ใหญ่), null แมปเป็น ?type (คุณสมบัติ nullable) คุณสมบัติทั้งหมดถูกประกาศด้วย typed properties PHP 7.4+; IDE สามารถทำการตรวจสอบประเภทโดยตรง

จุดเด่นที่แตกต่างอีกประการคือ 'การนำไปใช้อินเทอร์เฟซ JsonSerializable อัตโนมัติ': คลาส PHP แต่ละคลาสที่สร้างโดยเครื่องมือนี้นำไปใช้ \JsonSerializable อัตโนมัติและสร้างเมธอด public function jsonSerialize(): mixed { return [...] } ซึ่งหมายความว่าคุณสามารถ echo json_encode($user) เพื่อแสดงสตริง JSON โดยตรง; json_encode จะเรียกข้อมูลอาร์เรย์ที่ส่งคืนโดย jsonSerialize() อัตโนมัติ ด้วยอินเทอร์เฟซ Jsonable ใน Laravel คุณสามารถ return response()->json($user) โดยตรงโดยไม่ต้องประมวลผลเพิ่มเติม

แตกต่างจากเครื่องมือออนไลน์บางอย่างที่ต้องอัปโหลด JSON ไปยังเซิร์ฟเวอร์เพื่อประมวลผล การคำนวณทั้งหมดของเครื่องมือนี้เสร็จสมบูรณ์ในเบราว์เซอร์ quicktype-core โหลดและทำงานผ่าน Web Worker; การแยกวิเคราะห์ JSON, การอนุมานประเภท, การสร้างโค้ด PHP, การแพ็ก ZIP เกิดขึ้นในเครื่องทั้งหมด ไม่มีข้อมูลส่งไปยังเซิร์ฟเวอร์ สิ่งนี้สำคัญอย่างยิ่งสำหรับ JSON ที่มีคีย์ API, ฟิลด์ความเป็นส่วนตัวของผู้ใช้ หรือโครงสร้างธุรกิจที่ยังไม่เผยแพร่; ข้อมูลจะถูกล้างจากหน่วยความจำหลังจากปิดหน้า

โค้ดที่สร้างโดยทั่วไปต้องวางในโปรเจกต์ Composer เพื่อใช้งาน คุณต้องตรวจสอบให้แน่ใจว่าเวอร์ชัน PHP ตรงตามข้อกำหนดใน composer.json (PHP 7.4+ รองรับ typed properties, PHP 8.1+ รองรับ readonly class) จากนั้นคัดลอกคลาสที่สร้างไปยังไดเรกทอรี src autoload ผ่าน namespace (PSR-4) หลังจากนั้นคุณสามารถบริโภคข้อมูลด้วย json_decode($jsonString, false) หรือ json_decode($jsonString, true) + ดีซีเรียลไลซ์ เพลิดเพลินกับความสะดวกของระบบประเภท PHP

กรณีการใช้งาน

  • พัฒนาแบ็กเอนด์ Laravel: แปลง JSON ตัวอย่างจากเอกสาร API เป็นคลาส Eloquent Model / API Resource อย่างรวดเร็ว ซีเรียลไลซ์การตอบกลับโดยตรงด้วยอินเทอร์เฟซ Jsonable / Arrayable ในตัวของ Laravel
  • การรวม Symfony Serializer: แปลง JSON ที่ส่งคืนจาก API ของบุคคลที่สามเป็นคลาส PHP สไตล์ ArrayObject ทำการแมปอ็อบเจ็กต์เชิงลึกและการตรวจสอบข้อมูลด้วย Symfony Serializer
  • WordPress REST API: แปลงโครงสร้าง JSON ที่ส่งคืนจาก endpoint แบบกำหนดเองเป็นคลาส PHP สไตล์ stdClass ส่งออกโดยตรงด้วย wp_send_json() สอดคล้องกับพฤติกรรมเริ่มต้นของ wp_json_encode()
  • readonly DTO PHP 8.1+: แปลง JSON เป็น final readonly class สำหรับ Data Transfer Objects (DTO) ไม่เปลี่ยนรูปหลังจากสร้าง ป้องกันตรรกะทางธุรกิจจากการแก้ไขข้อมูลการตอบกลับโดยไม่ได้ตั้งใจ
  • พัฒนาแพ็กเกจ Composer: แปลง JSON Schema เป็นคลาส PHP จากนั้นเผยแพร่ไปยัง Packagist เป็นเลเยอร์โมเดล SDK นำกลับมาใช้ใหม่โดยโปรเจกต์ Composer อื่นผ่าน require
  • ฟิกซ์เจอร์ทดสอบหน่วย: แปลงฟิกซ์เจอร์ JSON เป็นคลาส PHP จากนั้นใช้ json_decode + ดีซีเรียลไลซ์เพื่อขับเคลื่อนข้อมูลทดสอบ ยืนยันบนฟิลด์ที่มีโครงสร้าง
  • สคริปต์ย้ายข้อมูล: แปลงไฟล์คอนฟิกูเรชัน JSON เป็นคลาส PHP สำหรับการเข้าถึงตรรกะทางธุรกิจที่มีประเภทชัดเจน การเติมข้อความอัตโนมัติของ IDE และการตรวจสอบประเภทดีกว่าการเข้าถึงอาร์เรย์
  • การรวม Mock ฝั่งฟรอนต์เอนด์: แบ็กเอนด์แปลงโมเดล JSON เป็นคลาส PHP ก่อน; ฟรอนต์เอนด์ได้รับ TypeScript interface / คลาส PHP ที่สอดคล้องกันในเวลาเดียวกัน รักษาประเภทให้สอดคล้องกันทั้งสองฝั่ง
  • ตรวจสอบโค้ด: แปลง JSON ที่ส่งคืนจาก API เป็นคลาส PHP ที่อ่านได้โดยตรง อำนวยความสะดวกในการสนทนาเกี่ยวกับการตั้งชื่อฟิลด์ การมองเห็นคุณสมบัติระหว่าง Code Review
  • รีแฟกเตอร์โปรเจกต์เก่า: รีแฟกเตอร์โค้ดที่เข้าถึงแบบไดนามิกผ่านอาร์เรย์เชื่อมโยงเป็นการเข้าถึงคลาส PHP ที่มีประเภทชัดเจน วิเคราะห์สถิตด้วย PHPStan / Psalm
  • PHPUnit DataProvider: แปลงข้อมูลทดสอบ JSON เป็นคลาส PHP จากนั้นฉีดเข้ากรณีทดสอบผ่าน DataProvider IDE แนะนำฟิลด์คุณสมบัติอัตโนมัติ
  • การรวม API แบ็กเอนด์ snake_case: เมื่อ API แบ็กเอนด์ส่งคืนฟิลด์ snake_case ระบบ PHP ฟรอนต์เอนด์เปิดใช้ 'แปลงเป็น camelCase' + สไตล์ ArrayObject สำหรับการรวมที่ราบรื่น
  • การวิเคราะห์สถิต PHPStan: คลาสที่สร้างมีประกาศประเภทตามธรรมชาติ; ดักจับข้อผิดพลาดประเภทใน CI ด้วย phpstan analyse --level=8
  • การสอนและการฝึกอบรม: แปลง JSON ตัวอย่างเป็นคลาส PHP ในสถานการณ์การสอน PHP เพื่อสาธิตการสร้างแบบจำลอง OOP ระบบประเภท การนำอินเทอร์เฟซไปใช้
  • เลเยอร์ API Gateway: แปลง JSON ที่ส่งคืนจากไมโครเซอร์วิสต้นทางเป็นคลาส PHP สำหรับการรวมเลเยอร์เกตเวย์; บริการ PHP ปลายทางบริโภคผ่านคุณสมบัติคลาสที่มีประเภทชัดเจน
  • การบริโภคข้อความคิว: แปลงเนื้อหาข้อความ JSON ที่บริโภคจาก RabbitMQ / Kafka เป็นคลาส PHP จากนั้นจัดเก็บหรือส่งต่อ; แยกวิเคราะห์อย่างเข้มงวดด้วย JSON_THROW_ON_ERROR
  • การสร้างแบบจำลอง SKU/SPU อีคอมเมิร์ซ: แปลงโครงสร้าง JSON ผลิตภัณฑ์ (หลายสเปค/หลายรูป/หลายแอตทริบิวต์) เป็นคลาส PHP ด้วยสไตล์ ArrayObject สำหรับการเพิ่มประสิทธิภาพคิวรี N+1 ใน Laravel
  • การตรวจสอบลายเซ็น WebHook callback: แปลงโครงสร้างการตรวจสอบลายเซ็น JSON จากเกตเวย์การชำระเงิน callback โลจิสติกส์เป็นคลาส PHP ตรวจสอบลายเซ็นด้วย hash_hmac()
  • Toolchain OpenAPI: แปลง JSON schema OpenAPI 3.x เป็นคลาส PHP รวมเข้ากับโฟลว์การสร้างไคลเอนต์ PHP ของ Swagger Codegen / Apifox
  • ไปป์ไลน์ ETL ข้อมูล: แปลง JSON จากแหล่งข้อมูลต้นทาง (ฟิลด์ JSON MySQL / MongoDB / Elasticsearch) เป็นคลาส PHP จากนั้นทำความสะอาดข้อมูลและจัดเก็บ

วิธีการใช้งาน

  1. วางอ็อบเจ็กต์ JSON (แนะนำ) หรืออาร์เรย์ในตัวแก้ไขด้านซ้าย หรือคลิก 'Sample' เพื่อโหลดตัวอย่างภาษาไทย (รวมถึง address / company / tags ที่ซ้อนกัน)
  2. คลิกปุ่ม 'Settings' ในแถบเครื่องมือ; ในป๊อปอัปเลือก: ① ตั้งชื่อคลาสราก (เช่น User) และ namespace (เช่น App\Models); ② เลือกสไตล์โค้ด (ArrayObject / stdClass / readonly class); ③ เลือกคุณสมบัติโค้ด (typed properties / การรวม Laravel / Symfony Serializer); ④ เลือกกลยุทธ์การตั้งชื่อฟิลด์ (เก็บต้นฉบับ / camelCase / ตัวพิมพ์เล็กทั้งหมด / UPPER_SNAKE)
  3. เครื่องมือจะแปลงอัตโนมัติภายใน 400ms; ด้านขวาจะแสดงคลาส PHP ที่สร้างทั้งหมด (แต่ละคลาสเป็นการ์ดอิสระ แถบชื่อแสดง badge สไตล์ปัจจุบันแบบเรียลไทม์); หาก JSON มีข้อผิดพลาดรูปแบบ ปุ่ม 'ซ่อม JSON' จะปรากฏขึ้น
  4. ตรวจสอบว่าชื่อคลาส ชื่อคุณสมบัติ และอินเทอร์เฟซที่สร้างตรงกับที่คาดหวัง; หากต้องการปรับแก้ แก้ไขชื่อคีย์ JSON ต้นทางหรือเปิดการตั้งค่าใหม่เพื่อแก้ไขตัวเลือก
  5. เมื่อพอใจแล้ว คลิกปุ่ม 'คัดลอก' ของคลาสเดี่ยวเพื่อวางลงใน IDE หรือคลิก 'Download ZIP' ในแถบเครื่องมือเพื่อดาวน์โหลดคลาสทั้งหมดในคลิกเดียว (โครงสร้างไดเรกทอรีจัดตามเส้นทาง namespace)

คุณสมบัติ

  • สองสไตล์โค้ด สลับได้อย่างอิสระ: ArrayObject (สืบทอด \ArrayObject รองรับการเข้าถึงแบบอาร์เรย์ $obj['key']) / stdClass (สืบทอด \stdClass รองรับการเข้าถึงแบบอ็อบเจ็กต์ $obj->key) เข้ากันได้กับการซีเรียลไลซ์ Laravel, WordPress REST, Symfony Serializer และสถานการณ์อื่นๆ
  • เทมเพลต PHP สมบูรณ์: สร้างการประกาศ namespace + use statements + คอมเมนต์ส่วนหัวคลาส (Copyright + เวลาที่สร้าง) + นิยามคลาส + typed public properties (PHP 7.4+) อัตโนมัติ สามารถ require เข้าโปรเจกต์ Composer ได้โดยตรงโดยไม่ต้องเติมโค้ดเทมเพลตด้วยตนเอง
  • อินเทอร์เฟซ JsonSerializable ถูกนำไปใช้อัตโนมัติ: แต่ละคลาสสร้าง public function jsonSerialize(): mixed { return [...] } อัตโนมัติ ทำงานร่วมกับ json_encode() เพื่อซีเรียลไลซ์ JSON โดยตรง ไม่ต้องมีโค้ดเทมเพลตเพิ่มเติม
  • PHP 8.1+ readonly class เลือกได้: เมื่อเปิดใช้งาน คลาสที่สร้างจะได้รับ final readonly class คุณสมบัติทั้งหมดเป็น readonly ไม่สามารถเปลี่ยนแปลงได้หลังจากสร้าง เหมาะสำหรับสถานการณ์ DTO การตอบกลับ API ที่ไม่เปลี่ยนรูป
  • การอนุมานประเภทอัจฉริยะ: string → string, integer → int, float → float, bool → bool, array → array, อ็อบเจ็กต์ที่ซ้อนกัน → คลาสอิสระ, null → ?type (คุณสมบัติ nullable) ไม่จำเป็นต้องระบุประเภทฟิลด์ด้วยตนเอง
  • คลาสที่ซ้อนกันแยกอัตโนมัติ: อ็อบเจ็กต์ที่ซ้อนกันสร้างคลาส PHP อิสระโดยใช้ตัวอักษรตัวแรกของชื่อฟิลด์เป็นชื่อคลาส (เช่น address → Address) อ็อบเจ็กต์ในอาร์เรย์ตั้งชื่อตามกฎ 'ลบ s ที่ท้าย' (เช่น users → User) คลาสที่ซ้อนกันทั้งหมดยังนำไปใช้ JsonSerializable ด้วย
  • กลยุทธ์การตั้งชื่อฟิลด์ 4 แบบ: เก็บต้นฉบับ / snake_case เป็น camelCase (user_name → userName) / ตัวพิมพ์เล็กทั้งหมด / สไตล์ค่าคงที่ UPPER_SNAKE ตรงกับข้อกำหนดโค้ด PSR-1 / Laravel / Symfony
  • การรวม Laravel คลิกเดียว: เมื่อทำเครื่องหมาย จะนำไปใช้อินเทอร์เฟซ Jsonable, Arrayable อัตโนมัติ เพิ่มเมธอด toArray() / toJson() สามารถใช้เป็น Eloquent API Resource โดยตรงด้วย Composer autoload
  • คัดลอกคลาสเดี่ยว + ดาวน์โหลด ZIP หลายไฟล์: แต่ละคลาส PHP มีปุ่ม 'คัดลอก' อิสระ ดาวน์โหลดแพ็กเกจ ZIP ที่จัดตามโครงสร้างไดเรกทอรี namespace ได้ในคลิกเดียว (เช่น App/Models/User.php) แตกไฟล์แล้วใช้ได้ทันที
  • ทำงานในเบราว์เซอร์ภายในเครื่อง + ประวัติ: การแยกวิเคราะห์ JSON, การสร้างคลาส PHP, การแพ็ก ZIP เสร็จสมบูรณ์ในเบราว์เซอร์ผ่าน JavaScript (quicktype-core + JSZip) ข้อมูลไม่ได้อัปโหลดไปยังเซิร์ฟเวอร์; มีประวัติ localStorage ในตัวสำหรับ 200 อินพุตล่าสุด

ตัวอย่างโค้ด

PHP: ซีเรียลไลซ์คลาสที่สร้างโดยเครื่องมือนี้ด้วย json_encode()

php

คลาส PHP ที่สร้างโดยเครื่องมือนี้นำไปใช้อินเทอร์เฟซ JsonSerializable ตามค่าเริ่มต้น แสดง JSON โดยตรงด้วย json_encode() โดยไม่ต้องประมวลผลเพิ่มเติม

<?php

require_once 'vendor/autoload.php';

use App\Models\User;

// 模拟从 API 接收到的 JSON 字符串
$jsonString = '{"id":1,"name":"Alice","email":"alice@example.com","isActive":true}';

// 1) 反序列化为本工具生成的类
$userData = json_decode($jsonString, true);
$user = new User(
    $userData['id'],
    $userData['name'],
    $userData['email'],
    $userData['isActive']
);

// 2) 强类型访问字段(IDE 自动补全 + PHPStan 静态检查)
echo $user->name;          // Alice
echo $user->email;         // alice@example.com
echo $user->isActive ? '活跃' : '禁用'; // 活跃

// 3) json_encode() 自动调用 jsonSerialize(),无需任何额外代码
echo json_encode($user, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
/*
{
    "id": 1,
    "name": "Alice",
    "email": "alice@example.com",
    "isActive": true
}
*/

PHP: ตัวอย่างการรวม Laravel API Resource

php

หลังจากทำเครื่องหมายการรวม Laravel คลาสที่สร้างโดยเครื่องมือนี้สามารถใช้โดยตรงเป็น Eloquent API Resource จัดรูปแบบการตอบกลับด้วย 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: ตัวอย่างการรวม Symfony Serializer

php

คลาสที่สร้างในสไตล์ ArrayObject โดยเครื่องมือนี้สามารถทำงานกับคอมโพเนนต์ Symfony Serializer สำหรับการซีเรียลไลซ์และดีซีเรียลไลซ์เชิงลึก เหมาะสำหรับเลเยอร์เกตเวย์ API ที่ซับซ้อน

<?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

สำหรับโปรเจกต์แบ็กเอนด์ PHP ส่วนใหญ่ คลาสที่สร้างในสไตล์ ArrayObject รองรับทั้งการเข้าถึงแบบอาร์เรย์ ($obj['key']) และการเข้าถึงแบบอ็อบเจ็กต์ ($obj->key); รวมถึงอินเทอร์เฟซ JsonSerializable ที่นำไปใช้ตามค่าเริ่มต้น json_encode() จะเรียกอาร์เรย์ที่ส่งคืนโดย jsonSerialize() อัตโนมัติ นี่คือรูปแบบพาหะข้อมูลอ็อบเจ็กต์ที่เป็นสากลที่สุดในระบบนิเวศ PHP เข้ากันได้กับเฟรมเวิร์กหลักเกือบทั้งหมดเช่น Laravel, Symfony, CodeIgniter

readonly class ที่แนะนำใน PHP 8.1+ เป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับ DTO: คุณสมบัติไม่สามารถแก้ไขได้หลังจากสร้าง ป้องกันตรรกะทางธุรกิจจากการแก้ไขข้อมูลการตอบกลับโดยไม่ได้ตั้งใจ; การโปรโมตคอนสตรักเตอร์ทำให้โค้ดกระชับขึ้น (public function __construct(public int $id, public string $name) {} หนึ่งบรรทัดสำหรับการประกาศคุณสมบัติ) เราแนะนำให้เปลี่ยน DTO การตอบกลับ API, โครงสร้าง callback WebHook, โมเดลไคลเอนต์ API ของบุคคลที่สามเป็นสไตล์ readonly class

ฟิลด์ฐานข้อมูล Laravel ใช้ snake_case ตามค่าเริ่มต้น แต่คุณสมบัติ PHP แนะนำให้ใช้ camelCase กลยุทธ์ 'แปลงเป็น camelCase' ของเครื่องมือนี้แปลงอัตโนมัติ ในขณะที่คีย์อาร์เรย์ return jsonSerialize() เก็บ snake_case เดิม; เอาต์พุต json_encode() ยังคงเป็น snake_case สิ่งนี้สอดคล้องกับนิสัยการเข้าถึงโมเดล Laravel ในขณะที่รักษาความเข้ากันได้ของ API

แพ็กเกจ ZIP ที่สร้างจัดตามเส้นทาง namespace (เช่น App/Models/User.php) กำหนดค่าส่วน autoload.psr-4 ใน composer.json เช่น: "App\\": "src/" จากนั้นรัน composer dump-autoload วิธีนี้ Composer จะแมป App\Models\User ไปยัง src/Models/User.php อัตโนมัติ ไม่ต้อง require ด้วยตนเอง

เครื่องมือนี้สร้าง typed properties ตามค่าเริ่มต้น (PHP 7.4+) สามารถให้ PHPStan อนุมานประเภทคุณสมบัติได้อย่างสมบูรณ์ในโหมด --level=8 เราแนะนำให้รวม phpstan analyse ./src --level=8 เข้ากับไปป์ไลน์ CI เพื่อดักจับข้อผิดพลาดประเภท Psalm ยังรองรับ PropertyTypeProvider สำหรับการตรวจสอบประเภทที่แข็งแกร่ง

เครื่องมือนี้ทำงานในเบราว์เซอร์ภายในเครื่องทั้งหมด จะไม่อัปโหลดข้อมูลใดๆ แต่จงสร้างนิสัย: ① ทำให้ JSON ที่มีคีย์ API/โทเค็น/ความเป็นส่วนตัวของผู้ใช้ไม่ละเอียดอ่อนก่อนแปลง; ② ตรวจสอบให้แน่ใจว่าการเชื่อมต่อเครือข่ายถูกตัดขาดเมื่อใช้เครื่องมือนี้สำหรับโครงสร้างธุรกิจภายในขนาดใหญ่ (อินเทอร์เฟซที่ยังไม่เผยแพร่); ③ อย่า commit ข้อมูลตัวอย่างที่มีข้อมูลละเอียดอ่อนไปยังที่เก็บสาธารณะหลังจากสร้างโค้ด

อ็อบเจ็กต์ JSON ที่ซ้อนกันสร้างคลาส PHP อิสระแบบเรียกซ้ำ หากระดับการซ้อนกันของ JSON เกิน 6 ชั้น (เช่น เมนูที่ซ้อนกันหลายระดับ, แผนผังองค์กร, เอกสารธุรกิจที่ซับซ้อน) จำนวนคลาสที่สร้างจะเพิ่มขึ้นอย่างมาก (N คลาสที่ซ้อนกันต่อชั้น) IDE โหลดช้าและบำรุงรักษายาก คำแนะนำ: ① แบ่ง JSON เป็นหลายโมดูลแล้วแปลงแยกกัน; ② หรือรีแฟกเตอร์ด้วยตนเองเป็นการเข้าถึงดัชนีอาร์เรย์ ($user['profile']['address']['city']) แทนการซ้อนคลาสหลังจากสร้าง

ค่า JSON null ถูกอนุมานเป็น ?mixed (nullable mixed) ตามค่าเริ่มต้น ซึ่งเป็น fallback ที่ปลอดภัยแต่ไม่ใช่ประเภทที่ถูกต้อง หากทราบประเภทฟิลด์ (เช่น "nickname": "" อนุมานเป็น string) ให้ค่าตัวอย่างใน JSON ต้นทางก่อน หลังจากสร้างแล้วลบค่าตัวอย่างแล้วเปลี่ยนเป็นประเภทที่ถูกต้องเช่น ?string สิ่งนี้จะปรับปรุงความถูกต้องของการวิเคราะห์สถิต PHPStan อย่างมีนัยสำคัญ

คำถามที่พบบ่อย

วิธีแปลง JSON เป็นคลาส PHP

วางเนื้อหา JSON ลงในช่องป้อนข้อมูลด้านซ้าย; เครื่องมือจะแปลงอัตโนมัติภายใน 400ms; หรือคลิกปุ่ม 'Convert' ในแถบเครื่องมือ หลังจากแปลงแล้ว คลาส PHP ที่สร้างทั้งหมดจะแสดงทางด้านขวา; แต่ละคลาสมีปุ่ม 'คัดลอก' อิสระ; คลิก 'Download ZIP' ในแถบเครื่องมือเพื่อแพ็กและดาวน์โหลดคลาสทั้งหมด (พร้อมโครงสร้างไดเรกทอรี namespace)

รองรับโครงสร้างข้อมูล JSON อะไรบ้าง

รองรับสองโครงสร้าง: ① อ็อบเจ็กต์ JSON (เป็นคลาสราก สร้าง class RootClass อัตโนมัติ); ② อาร์เรย์ JSON (อ็อบเจ็กต์แรกในอาร์เรย์เป็นแม่แบบคลาสราก) อ็อบเจ็กต์ที่ซ้อนกันทั้งหมดถูกประมวลผลแบบเรียกซ้ำเป็นคลาสอิสระ; อ็อบเจ็กต์ในอาร์เรย์ถูกประมวลผลแบบเรียกซ้ำเป็นคลาสที่สอดคล้องกับประเภทองค์ประกอบอาร์เรย์

คลาส PHP ที่สร้างมีเนื้อหาอะไรบ้าง

ไฟล์ .php ที่สร้างแต่ละไฟล์ประกอบด้วย: ① คอมเมนต์ส่วนหัวไฟล์ (Copyright + เวลาที่สร้างอัตโนมัติ); ② การประกาศ namespace; ③ use statements (นำเข้า \JsonSerializable / \ArrayAccess อัตโนมัติตามความจำเป็น); ④ นิยามคลาส (ArrayObject / stdClass / readonly class ตามการตั้งค่า); ⑤ อินเทอร์เฟซที่นำไปใช้ (JsonSerializable / Jsonable / Arrayable ตามการตั้งค่า); ⑥ typed public properties (PHP 7.4+); ⑦ คอนสตรักเตอร์ (กำหนดค่าคุณสมบัติครบถ้วนตามการตั้งค่า); ⑧ เมธอดเช่น jsonSerialize() / toArray() / toJson() สมบูรณ์และพร้อมสำหรับการตรวจสอบไวยากรณ์ php -l และการใช้งาน require

ความแตกต่างระหว่างสไตล์ ArrayObject และ stdClass คืออะไร

สไตล์ ArrayObject: คลาสที่สร้างสืบทอด \ArrayObject รองรับทั้งการเข้าถึงแบบอาร์เรย์ $obj['key'] และการเข้าถึงแบบอ็อบเจ็กต์ $obj->key ส่งคืนอ็อบเจ็กต์ในระหว่าง json_encode() สไตล์ stdClass: คลาสที่สร้างสืบทอด \stdClass รองรับเฉพาะการเข้าถึงแบบอ็อบเจ็กต์ $obj->key เบากว่าแต่ไม่มีการเข้าถึงแบบอาร์เรย์โดยตรง ระบบนิเวศ Laravel / WordPress ใช้สไตล์ stdClass เป็นค่าเริ่มต้น (พฤติกรรมเริ่มต้น json_decode), Symfony Serializer ใช้สไตล์ ArrayObject เป็นค่าเริ่มต้น

รองรับการสร้าง Laravel API Resource หรือไม่

ใช่ หลังจากทำเครื่องหมายตัวเลือก 'การรวม Laravel คลิกเดียว' ในการตั้งค่า เครื่องมือจะนำไปใช้อินเทอร์เฟซ Jsonable, Arrayable อัตโนมัติ เพิ่มเมธอด toJson($options = 0) และ toArray(); คลาสที่สร้างสามารถใช้โดยตรงใน Eloquent API Resource (เช่น new UserResource($user) หรือ $user->toArray()) นอกจากนี้ยังใช้ Illuminate\Contracts\Support\Jsonable และ Illuminate\Contracts\Support\Arrayable อัตโนมัติ

โค้ดที่สร้างด้วยโหมด PHP 8.1 readonly class เป็นอย่างไร

หลังจากเปิดใช้ readonly class คลาส PHP ที่สร้างจะถูกทำให้เรียบง่ายขึ้นอย่างมาก ตัวอย่างเช่น class User ที่เปิดใช้ readonly มีประมาณ 12 บรรทัด: final readonly class User implements \JsonSerializable { public function __construct(public int $id, public string $name) {} public function jsonSerialize(): array { return [...] } } คุณสมบัติทั้งหมดถูกประกาศเป็น readonly ผ่านการโปรโมตคุณสมบัติคอนสตรักเตอร์ ไม่สามารถเปลี่ยนแปลงได้หลังจากสร้าง หมายเหตุ: โปรเจกต์ต้องใช้ PHP 8.1+, ฟิลด์ readonly สามารถกำหนดค่าได้ผ่านคอนสตรักเตอร์เท่านั้น

วิธีแปลงชื่อฟิลด์ snake_case เป็น camelCase

ในกลุ่ม 'กลยุทธ์การตั้งชื่อฟิลด์' ของป๊อปอัปการตั้งค่า เลือกโหมด 'แปลงเป็น camelCase'; เครื่องมือจะแปลงชื่อฟิลด์ JSON จาก snake_case เป็นสไตล์การตั้งชื่อที่แนะนำของ PHP อัตโนมัติ เช่น user_name → userName, created_at → createdAt, is_active → isActive นอกจากนี้หาก JSON มาจาก Laravel route binding สามารถเข้าถึงคุณสมบัติคลาสโดยตรงผ่าน $request->userName โดยไม่ต้องแปลงกลางด้วยตนเอง

อ็อบเจ็กต์ JSON ที่ซ้อนกันได้รับการจัดการอย่างไร

เครื่องมือสร้างคลาส PHP อิสระสำหรับอ็อบเจ็กต์ที่ซ้อนกันโดยอัตโนมัติ กฎการตั้งชื่อ: คีย์ของอ็อบเจ็กต์ที่ซ้อนกันใช้ตัวอักษรตัวแรกเป็นชื่อคลาส (เช่น address → Address), คีย์อ็อบเจ็กต์ในอาร์เรย์ลบ s ที่ท้ายแล้วใช้ตัวอักษรตัวแรก (เช่น users → User) คลาสที่ซ้อนกันทั้งหมดยังมีฟิลด์ครบถ้วน คอนสตรักเตอร์ เมธอด jsonSerialize() namespace สอดคล้องกับคลาสราก สามารถนำเข้าผ่าน use App\Models\Address

ฟิลด์อาร์เรย์แปลงเป็นอะไรโดยอัตโนมัติ

ใช่ ฟิลด์อาร์เรย์ใน JSON แปลงเป็นคุณสมบัติ PHP array อัตโนมัติ; ประเภทองค์ประกอบถูกอนุมานอัตโนมัติจากองค์ประกอบแรก เช่น ["a","b","c"] → array (ระบุ array<string> ในคอมเมนต์); [{...},{...}] → array (ระบุ array<User> ในคอมเมนต์, User คือคลาสใหม่ที่ตั้งชื่อจากคีย์); อาร์เรย์ว่าง [] ค่าเริ่มต้นเป็น array (ระบุ array<mixed> ในคอมเมนต์) PHPDoc annotation ใน PHP 8.0+ ให้คำใบ้ประเภทใน IDE

วิธีแก้ไขชื่อคลาสรากและ namespace

ปุ่มการตั้งค่าที่มุมบนขวาของแถบเครื่องมือ; คลิกเพื่อเปิดกล่องโต้ตอบการตั้งค่า สามารถตั้งค่า: ① ชื่อคลาสราก (ค่าเริ่มต้น JsonRootClass); ② namespace (ค่าเริ่มต้น App\Models) หลังจากแก้ไข ชื่อคลาสที่สร้างทั้งหมดจะอัปเดตพร้อมกัน; โครงสร้างไดเรกทอรี ZIP ยังจัดตาม namespace (เช่น App/Models/User.php)

ดาวน์โหลดเป็นไฟล์ .php เดียวหรือแพ็กเกจ ZIP

ดาวน์โหลดเป็นแพ็กเกจ ZIP (User.zip) ซึ่งมีคลาส PHP ที่สร้างทั้งหมดที่จัดตามเส้นทาง namespace เช่น เมื่อ namespace เป็น App\Models โครงสร้างไฟล์ภายใน ZIP: App/Models/User.php, App/Models/Address.php, App/Models/Company.php ฯลฯ สามารถนำเข้าโดยตรงไปยังไดเรกทอรี src ของโปรเจกต์ Composer ผ่านคำสั่ง unzip หรือ IDE

สามารถคัดลอกคลาสเดี่ยวไปยัง IDE โดยตรงได้หรือไม่

ใช่ คลาส PHP ที่สร้างแต่ละคลาสแสดงเป็นการ์ดอิสระ; มุมบนขวาของการ์ดมีปุ่ม 'คัดลอก'; การคลิกจะคัดลอกโค้ดคลาสที่สมบูรณ์ (รวมถึง <?php + namespace + use + class + คุณสมบัติ + คอนสตรักเตอร์ + เมธอด) ไปยังคลิปบอร์ด สามารถวางโดยตรงลงใน IDE เช่น PhpStorm / VS Code / Sublime

วิธีทำให้คลาสที่สร้างนำไปใช้อินเทอร์เฟซ JsonSerializable

เปิดใช้งานตามค่าเริ่มต้น คลาส PHP ที่สร้างทั้งหมดนำไปใช้ \JsonSerializable อัตโนมัติและสร้างเมธอด public function jsonSerialize(): array { return [...] }; อาร์เรย์ที่ส่งคืนถูกประกอบตามลำดับคุณสมบัติคลาส สามารถ echo json_encode($user) เพื่อแสดงสตริง JSON โดยตรง หรือ return response()->json($user) ใน Laravel

Symfony Serializer สามารถใช้คลาสที่สร้างโดยเครื่องมือนี้ได้หรือไม่

ใช่ Symfony Serializer อ่านข้อมูลในสไตล์อาร์เรย์ตามค่าเริ่มต้น เข้ากันได้ดีกับคลาสที่สร้างในสไตล์ ArrayObject สามารถซีเรียลไลซ์โดยตรงด้วย $serializer->serialize($user, 'json) ของ SerializerInterface; การดีซีเรียลไลซ์ผ่าน deserialize() ต้องการคุณสมบัติ public หรือเมธอด getter สิ่งที่เครื่องมือนี้สร้างคือสไตล์การกำหนดค่าคอนสตรักเตอร์ + คุณสมบัติ public สามารถใช้โดยตรงกับ PropertyNormalizer ของ Symfony Serializer

จะทำอย่างไรหาก JSON มีข้อผิดพลาดรูปแบบ

เครื่องมือตรวจสอบความถูกต้องของ JSON อัตโนมัติ; เมื่อมีข้อผิดพลาด จะแสดงข้อความแจ้งเตือนสีแดงทางด้านขวาพร้อมปุ่ม 'ซ่อม JSON' การคลิกจะซ่อมข้อผิดพลาดทั่วไปอัตโนมัติ: ① จุลภาคพิเศษที่ท้าย; ② เปลี่ยนอัญประกาศเดี่ยวเป็นอัญประกาศคู่; ③ เติมอัญประกาศสำหรับคีย์ที่ไม่มีอัญประกาศ; ④ ลบคอมเมนต์ หลังจากซ่อมสำเร็จ สามารถแปลงและสร้างคลาส PHP ได้โดยตรง

ข้อมูลถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่ ความเป็นส่วนตัวปลอดภัยหรือไม่

ทำงานในเบราว์เซอร์ภายในเครื่องทั้งหมด การแยกวิเคราะห์ JSON, การสร้างคลาส PHP, การแพ็ก ZIP เสร็จสมบูรณ์ในเบราว์เซอร์ของคุณผ่าน JavaScript (quicktype-core + JSZip); ข้อมูล JSON ที่ป้อนและโค้ด PHP ที่สร้างไม่เคยอัปโหลดไปยังเซิร์ฟเวอร์ใดๆ ไม่ถูกบันทึกหรือแคชไปยังคลาวด์ JSON ที่ละเอียดอ่อนซึ่งมีฟิลด์อินเทอร์เฟซภายใน โครงสร้างธุรกิจที่ยังไม่เผยแพร่ การตอบกลับ API ที่ยังไม่ได้เผยแพร่สามารถใช้ได้อย่างปลอดภัย; ข้อมูลจะถูกล้างเมื่อปิดหน้า

JSON ขนาดใหญ่ที่มี 10,000 บรรทัดจะทำให้ล่าช้าหรือไม่

เครื่องมือไม่มีขีดจำกัดบรรทัดอย่างชัดเจน แต่การแยกวิเคราะห์และการเรนเดอร์ JSON ขนาดใหญ่มากโดยเบราว์เซอร์จะช้าลง คำแนะนำ: ① แบ่ง JSON แล้วแปลงเป็นชุด; ② มุ่งเน้นไปที่ระดับการซ้อนกันหนึ่งระดับในแต่ละครั้ง; ③ สำหรับการสร้าง 100+ คลาสเป็นชุด แนะนำให้ใช้ปลั๊กอินเทมเพลต PHP ใน IDE โดยตรงหรือเขียนสคริปต์ quicktype CLI อย่างง่าย

คลาส PHP ที่สร้างรองรับเวอร์ชัน PHP ต่ำกว่า 7.4 หรือไม่

ไม่รองรับอย่างสมบูรณ์ คลาสที่สร้างโดยเครื่องมือนี้ใช้ typed properties PHP 7.4+ ตามค่าเริ่มต้น (เช่น public int $id) หากโปรเจกต์ของคุณยังอยู่ที่ PHP 7.0~7.3 การประกาศประเภทจะทำให้เกิดข้อผิดพลาดความเข้ากันได้ คำแนะนำ: ① อัปเกรดโปรเจกต์เป็น PHP 8.1+ (แนะนำ ประสิทธิภาพและระบบประเภทดีขึ้น); ② หรือลบการประกาศประเภทเป็นชุดใน IDE หลังจากสร้าง (ค้นหาและแทนที่ `public int ` → `public `); ③ หรือใช้โหมดความเข้ากันได้ PHP 7.4 (PHP 7.4 เป็นพื้นฐานของเครื่องมือนี้)

การแก้ไขปัญหา

แสดง 'กรุณาป้อนข้อมูล JSON' หรือด้านขวาว่างเปล่า

ช่องป้อนข้อมูลด้านซ้ายว่างเปล่าหรือมีเฉพาะช่องว่าง ตรวจสอบให้แน่ใจว่าได้วางเนื้อหา JSON ที่ถูกต้อง หรือคลิก 'Sample' เพื่อโหลดตัวอย่างภาษาไทย หรือคลิก 'Upload' เพื่อเลือกไฟล์ .json / .txt

แสดง 'Unexpected token ... in JSON at position N'

รูปแบบ JSON ไม่ถูกต้อง สาเหตุทั่วไป: ① จุลภาคพิเศษที่ท้าย (เช่น {"a":1,}); ② ใช้อัญประกาศเดี่ยวแทนอัญประกาศคู่; ③ สัญกรณ์อ็อบเจ็กต์ JS (เช่น {key: value}) แทน JSON (เช่น {"key": "value"}) คลิกปุ่ม 'ซ่อม JSON' เพื่อซ่อมข้อผิดพลาดบางอย่างอัตโนมัติ

ข้อผิดพลาด 'Typed property must not be accessed before initialization' ในโปรเจกต์ PHP 7.x

คลาสที่สร้างโดยเครื่องมือนี้ใช้ typed properties PHP 7.4+ ตามค่าเริ่มต้น (เช่น public int $id) หากโปรเจกต์ของคุณยังอยู่ที่ PHP 7.0~7.3 การประกาศประเภทจะทำให้เกิดปัญหาความเข้ากันได้ วิธีแก้ไข: ① อัปเกรดโปรเจกต์เป็น PHP 8.1+ (แนะนำ); ② ลบการประกาศประเภทเป็นชุดใน IDE (ค้นหาและแทนที่ `public int ` → `public `); ③ ยกเลิกการทำเครื่องหมายตัวเลือก 'PHP 7.4 typed properties'

ข้อผิดพลาด PHP 8.1 readonly class 'Cannot modify readonly property'

คุณสมบัติที่สร้างในสไตล์ readonly class ไม่สามารถแก้ไขได้หลังจากสร้าง หากคุณพยายาม $user->name = 'Bob' จะเกิดข้อผิดพลาด วิธีแก้ไข: ① เปลี่ยนเป็นสไตล์ ArrayObject หรือ stdClass (คุณสมบัติแก้ไขได้); ② หรือสร้างอินสแตนซ์ใหม่ผ่าน new User(...) แทนการแก้ไข

ไม่พบ Illuminate\Contracts\Support\Jsonable ในโปรเจกต์ Laravel

สไตล์การรวม Laravel ต้องการการอ้างอิง laravel/framework ตรวจสอบให้แน่ใจว่าใน composer.json มี: "require": { "php": "^8.1", "laravel/framework": "^11.0" } จากนั้นรัน composer update เพื่อติดตั้งการอ้างอิง หากไม่ใช้ Laravel โปรดเลือกสไตล์ ArrayObject หรือ stdClass แทน

ความล้มเหลวในการดีซีเรียลไลซ์ Symfony Serializer 'Cannot denormalize object'

สาเหตุทั่วไป: ① คลาสที่สร้างไม่มีคุณสมบัติ public หรือเมธอด getter (Symfony Serializer ใช้ PropertyNormalizer ตามค่าเริ่มต้น); ② คลาสขาดคอนสตรักเตอร์ที่ไม่มีอาร์กิวเมนต์แต่มีพารามิเตอร์ที่จำเป็น วิธีแก้ไข: ① ยืนยันว่าเครื่องมือนี้สร้างคุณสมบัติ public; ② สร้างอ็อบเจ็กต์ด้วยตนเองผ่านเมธอดสแตติก fromArray() จากนั้นส่งให้ Serializer

ชื่อคลาสของอ็อบเจ็กต์ที่ซ้อนกันไม่เป็นไปตามที่คาดหวัง (เช่น categories ตั้งชื่อเป็น Categori)

เครื่องมือใช้กฎการตั้งชื่อ 'ลบ s ที่ท้าย + ตัวอักษรตัวแรก' สำหรับอ็อบเจ็กต์ในอาร์เรย์; สำหรับพหูพจน์ที่ไม่สม่ำเสมอเช่น categories สิ่งนี้ไม่เป็นมิตร คำแนะนำ: ① เปลี่ยนคีย์ JSON ต้นทางเป็นเอกพจน์ (เช่น categories → category); ② หรือหลังจากสร้างแล้วใช้ฟังก์ชัน Rename ของ IDE เพื่อเปลี่ยนชื่อคลาส (แก้ไขการอ้างอิงทั้งหมดพร้อมกัน)

โครงสร้างไดเรกทอรี ZIP ที่ดาวน์โหลดไม่ถูกต้องหลังจากแตกไฟล์

ไดเรกทอรีภายใน ZIP จัดตามการตั้งค่า namespace (ค่าเริ่มต้น App/Models/) หากตำแหน่งหลังจากแตกไฟล์ไม่ถูกต้อง: ① แก้ไขชื่อ namespace (เช่น เป็น App\Dto) แล้วดาวน์โหลดใหม่; ② ระบุไดเรกทอรีแตกไฟล์ด้วย unzip -d src/; ③ หรือเปิดโฟลเดอร์ที่แตกไฟล์ทั้งหมดโดยตรงใน IDE

คลาสที่สร้างไม่ถูกโหลดอัตโนมัติ

โปรเจกต์ Composer ต้องการการกำหนดค่าการแมป autoload PSR-4 ใน composer.json เช่น: "autoload": { "psr-4": { "App\\": "src/" } } จากนั้นรัน composer dump-autoload; Composer จะโหลดไฟล์คลาสอัตโนมัติตามการแมป namespace ไปยังไดเรกทอรี

ชื่อฟิลด์เปลี่ยนไปหลังจากแปลง snake_case เป็น camelCase

'แปลงเป็น camelCase' เปลี่ยนชื่อคุณสมบัติ PHP (เช่น user_name → userName) แต่คีย์อาร์เรย์ return ในเมธอด jsonSerialize() ยังคงเป็น snake_case เดิม; JSON เอาต์พุต json_encode() ยังคงมีชื่อฟิลด์เดิม ดังนั้นเข้าถึงคุณสมบัติ PHP เป็น $user->userName เอาต์พุต JSON ยังคงเป็น {"user_name": "..."} หากต้องการเข้าถึงแบบ camelCase ในการดีซีเรียลไลซ์ด้วย จำเป็นต้องเปลี่ยนคีย์ในอาร์เรย์ return jsonSerialize() เป็น camelCase

หน้าล่าช้าเมื่อสร้าง 100+ คลาสที่ซ้อนกัน

เครื่องมือไม่มีขีดจำกัดจำนวนคลาสอย่างชัดเจน แต่ประสิทธิภาพการเรนเดอร์ DOM ขนาดใหญ่มากของเบราว์เซอร์ลดลงอย่างมาก คำแนะนำ: ① แบ่ง JSON เป็นโมดูลอิสระหลายโมดูลแล้วแปลงแยกกัน; ② หรือใช้เครื่องมือสร้างโค้ดในตัวของ IDE โดยตรง (เช่น ปลั๊กอิน JSON to PHP ของ PhpStorm); ③ ระดับการซ้อนกันแนะนำไม่ให้เกิน 6 ชั้น มิฉะนั้นแนะนำให้รีแฟกเตอร์โครงสร้าง JSON

อาร์เรย์เป็นประเภทตัวเลขแต่สร้าง array<int> ในขณะที่จริงๆ ควรเป็น array<float>

เครื่องมืออนุมานประเภทจากองค์ประกอบแรกของอาร์เรย์ (เช่น [1, 2, 3] อนุมานเป็น int, [1.5, 2.5] อนุมานเป็น float) หากคุณผสมจำนวนเต็มและทศนิยม (เช่น [1, 2.5]) เครื่องมือจะอนุมานจากองค์ประกอบแรก วิธีแก้ไข: ① เพิ่มองค์ประกอบ float ตัวอย่างอย่างน้อยหนึ่งองค์ประกอบใน JSON ต้นทาง (เช่น [0.0, 1.5]); ② หรือปรับประเภทในคำอธิบายประกอบ PHPDoc ด้วยตนเองหลังจากสร้าง

ฟิลด์ค่า null สร้างเป็นประเภท ?mixed แทนที่จะเป็น ?string

ค่า JSON null ถูกเครื่องมืออนุมานเป็นประเภท ?mixed ตามค่าเริ่มต้น (เนื่องจากไม่สามารถระบุประเภทจริงได้) นี่เป็นแนวทางปฏิบัติที่ปลอดภัยเพื่อหลีกเลี่ยงการตัดสินผิด หากทราบประเภท ให้ค่าตัวอย่างแก่ฟิลด์นี้ใน JSON ต้นทาง (เช่น "field": "" อนุมานเป็น string) หลังจากสร้างแล้วเปลี่ยนประเภทเป็น ?string

คลาสยังไม่ถูกโหลดอัตโนมัติหลังจาก composer dump-autoload

สาเหตุที่เป็นไปได้: ① namespace ไม่ตรงกับไดเรกทอรี (เช่น namespace App\Models แต่ไฟล์อยู่ใน src/Dto/); ② การแมป psr-4 ใน composer.json ผิด (เช่น "App\\": "src/Dto/" ควรเป็น "App\\Dto\\": "src/Dto/") วิธีแก้ไข: ตรวจสอบว่า namespace ของแต่ละไฟล์ .php สอดคล้องกับเส้นทางไดเรกทอรีอย่างเคร่งครัด (ส่วน namespace ต้องเท่ากับส่วนไดเรกทอรี ไวต่อขนาดตัวพิมพ์)

PHPStan แจ้ง 'Property does not have default value'

typed properties ที่สร้างไม่มีค่าเริ่มต้น PHPStan ถือว่าอาจไม่ได้เริ่มต้นในโหมด --level=8 วิธีแก้ไข: ① ปิดกฎ strict ของ PHPStan; ② กำหนดค่าว่างในคอนสตรักเตอร์ (เช่น $this->tags = []); ③ ใช้สไตล์ readonly class (กำหนดค่าหลังจากการโปรโมตคอนสตรักเตอร์)

ความล้มเหลวในการดีซีเรียลไลซ์อาร์เรย์อ็อบเจ็กต์ของ Symfony Serializer

สำหรับอาร์เรย์อ็อบเจ็กต์เช่น [{...},{...}] PropertyNormalizer ต้องการคำใบ้ประเภทองค์ประกอบ วิธีแก้ไข: ① ระบุประเภท array<User> อย่างชัดเจนใน PHPDoc; ② หรือห่อด้วย ArrayCollection ($users = new ArrayCollection())

คีย์ภาษาจีนสร้างชื่อคุณสมบัติ PHP ที่มีอักขระพิเศษ

เมื่อ JSON ต้นทางมีคีย์ภาษาจีน (เช่น "姓名": "Alice") เครื่องมือจะสร้างคุณสมบัติ public string $姓名; IDE อาจแจ้งเตือนว่าการตั้งชื่อไม่เป็นมาตรฐานแต่จะไม่ทำให้เกิดข้อผิดพลาด คำแนะนำ: ① เปลี่ยนคีย์ JSON เป็นภาษาอังกฤษ (สอดคล้องกับการตั้งชื่อ PHP PSR-1 มากขึ้น); ② เมื่อเก็บภาษาจีนไว้ ตรวจสอบให้แน่ใจว่าการเข้ารหัสไฟล์ PHP เป็น UTF-8 (PHP ค่าเริ่มต้น UTF-8)

ลำดับเอาต์พุต $obj['key'] และ $obj->key ในสไตล์ ArrayObject ไม่สอดคล้องกัน

การเข้าถึงแบบอาร์เรย์สไตล์ ArrayObject ส่งคืนตามลำดับการประกาศคุณสมบัติ; การเข้าถึงแบบอ็อบเจ็กต์ส่งคืนตามลำดับอาร์เรย์ return ในเมธอด jsonSerialize() หากลำดับทั้งสองไม่สอดคล้องกัน จะทำให้เอาต์พุต echo json_encode() ไม่สอดคล้องกับ var_dump($obj) คำแนะนำ: รักษาลำดับ return jsonSerialize() ให้สอดคล้องกับลำดับพารามิเตอร์คอนสตรักเตอร์

ID ตัวเลขใน JSON callback WebHook เกิน PHP_INT_MAX

int ของ PHP เป็นจำนวนเต็มที่มีเครื่องหมาย 64 บิตบนระบบ 64 บิต (สูงสุด 9223372036854775807); หาก ID ตัวเลขใน JSON เกินช่วงนี้ (เช่น ID snowflake ของ Twitter) จะถูกตัดทอน วิธีแก้ไข: ① รับ ID เป็นประเภทสตริง ("id": "1234567890123456789"); ② แยกวิเคราะห์ด้วยแฟล็ก JSON_BIGINT_AS_STRING

อภิธานศัพท์

namespace
กลไกเนมสเปซที่แนะนำใน PHP 5.3+ เพื่อหลีกเลี่ยงการชนกันของชื่อคลาส เครื่องมือนี้สร้างอัตโนมัติตาม namespace ที่ผู้ใช้ตั้งค่าและจัดในไดเรกทอรี App/Models/ ใน ZIP
class
เทมเพลตสำหรับกำหนดอ็อบเจ็กต์ใน PHP สิ่งที่เครื่องมือนี้สร้างคือคลาส PHP มาตรฐาน สามารถสร้างอินสแตนซ์โดยตรงผ่าน new User(...)
ArrayObject
คลาสในไลบรารีมาตรฐาน SPL ของ PHP ที่นำไปใช้อินเทอร์เฟซเช่น ArrayAccess คลาสที่สร้างในสไตล์ ArrayObject โดยเครื่องมือนี้สืบทอดจาก \ArrayObject รองรับการเข้าถึงแบบคู่ทั้งสไตล์อาร์เรย์และสไตล์อ็อบเจ็กต์
stdClass
คลาสอ็อบเจ็กต์ทั่วไปในตัวของ PHP; json_decode($json, false) ส่งคืนประเภทนี้ตามค่าเริ่มต้น คลาสที่สร้างในสไตล์ stdClass โดยเครื่องมือนี้สืบทอดจาก \stdClass รองรับเฉพาะการเข้าถึงแบบอ็อบเจ็กต์
typed properties
การประกาศประเภทคุณสมบัติที่แนะนำใน PHP 7.4+ (เช่น public int $id) คุณสมบัติที่สร้างโดยเครื่องมือนี้มีการประกาศประเภทตามค่าเริ่มต้น; IDE และเครื่องมือวิเคราะห์สถิตสามารถทำการตรวจสอบประเภทโดยตรง
readonly class
คลาส readonly ที่แนะนำใน PHP 8.1+; คุณสมบัติทั้งหมดในคลาสเป็น readonly อัตโนมัติ ไม่สามารถแก้ไขได้หลังจากสร้าง เครื่องมือนี้สร้าง final readonly class ในสไตล์ readonly เหมาะสำหรับสถานการณ์ DTO ที่ไม่เปลี่ยนรูป
JsonSerializable
อินเทอร์เฟซที่แนะนำใน PHP 5.4+; อ็อบเจ็กต์ที่นำไปใช้อินเทอร์เฟซนี้จะเรียกเมธอด jsonSerialize() อัตโนมัติเมื่อเรียก json_encode() คลาสทั้งหมดโดยเครื่องมือนี้นำไปใช้อินเทอร์เฟซนี้อัตโนมัติ
Jsonable (Laravel)
อินเทอร์เฟซสัญญาของเฟรมเวิร์ก Laravel; หลังจากนำไปใช้ อ็อบเจ็กต์สามารถเรียก toJson() เพื่อแสดง JSON ได้ สไตล์การรวม Laravel ของเครื่องมือนี้นำไปใช้อินเทอร์เฟซนี้อัตโนมัติ
Arrayable (Laravel)
อินเทอร์เฟซสัญญาของเฟรมเวิร์ก Laravel; หลังจากนำไปใช้ อ็อบเจ็กต์สามารถเรียก toArray() เพื่อแสดงอาร์เรย์ได้ สไตล์การรวม Laravel ของเครื่องมือนี้นำไปใช้อินเทอร์เฟซนี้อัตโนมัติ
Composer
เครื่องมือจัดการการอ้างอิงอย่างเป็นทางการของ PHP เมื่อใช้โค้ดที่สร้างโดยเครื่องมือนี้ จำเป็นต้องกำหนดค่า PSR-4 autoload ใน composer.json (เช่น App\\: src/)
PSR-4
มาตรฐาน autoload ที่กำหนดโดย PHP-FIG โหลดไฟล์คลาสผ่านการแมป namespace ไปยังไดเรกทอรี แพ็กเกจ ZIP ที่สร้างโดยเครื่องมือนี้จัดตามเส้นทาง namespace สอดคล้องกับมาตรฐาน PSR-4
Symfony Serializer
เฟรมเวิร์กการซีเรียลไลซ์ของคอมโพเนนต์ Symfony คลาสที่สร้างในสไตล์ ArrayObject โดยเครื่องมือนี้สามารถทำงานกับ PropertyNormalizer ของ Symfony Serializer สำหรับการซีเรียลไลซ์และดีซีเรียลไลซ์เชิงลึก
Eloquent API Resource
คลาสทรัพยากร API ของ Laravel Eloquent สำหรับจัดรูปแบบการตอบกลับ API คลาสที่สร้างในสไตล์การรวม Laravel โดยเครื่องมือนี้สามารถใช้โดยตรงเป็นคลาสพื้นฐาน API Resource
composer.json
ไฟล์คอนฟิกูเรชันของโปรเจกต์ Composer หลังจากวางโค้ดที่สร้างโดยเครื่องมือนี้ลงในไดเรกทอรี src จำเป็นต้องกำหนดค่าส่วน autoload ใน composer.json และรัน composer dump-autoload
json_encode / json_decode
ฟังก์ชันการซีเรียลไลซ์และดีซีเรียลไลซ์ JSON ในตัวของ PHP หลังจากคลาสที่สร้างโดยเครื่องมือนี้นำไปใช้ JsonSerializable แล้ว json_encode() จะเรียกเมธอด jsonSerialize() อัตโนมัติ
PHPUnit DataProvider
กลไกผู้ให้บริการข้อมูลของเฟรมเวิร์กทดสอบ PHPUnit คลาส PHP ที่สร้างโดยเครื่องมือนี้สามารถฉีดเข้ากรณีทดสอบเป็น DataProvider ปรับปรุงประสิทธิภาพการเขียนทดสอบด้วยการเติมข้อความอัตโนมัติของ IDE
PHPStan
เครื่องมือวิเคราะห์สถิต PHP สามารถทำการตรวจสอบประเภทและตรวจจับข้อผิดพลาดบนโค้ดได้ คลาสที่สร้างโดยเครื่องมือนี้ เนื่องจากมี typed properties จึงสามารถให้ PHPStan อนุมานประเภทคุณสมบัติได้อย่างสมบูรณ์ในโหมด --level=8
Psalm
เครื่องมือวิเคราะห์สถิต PHP อีกตัวหนึ่ง ซึ่งเป็นโอเพ่นซอร์สโดย Vimeo คลาสที่สร้างโดยเครื่องมือนี้สามารถทำการตรวจสอบประเภทที่แข็งแกร่งด้วย PropertyTypeProvider ของ Psalm
Doctrine
ชุดเครื่องมือ ORM และ DBAL ในระบบนิเวศ PHP คลาส PHP ที่สร้างโดยเครื่องมือนี้สามารถใช้เป็นโครงสำหรับ Doctrine Entity จากนั้นเพิ่มคำอธิบายประกอบเช่น #[ORM\Column] ด้วยตนเอง
php -l
คำสั่งตรวจสอบไวยากรณ์บรรทัดคำสั่ง PHP คลาสที่สร้างโดยเครื่องมือนี้สามารถรัน php -l User.php เพื่อตรวจสอบไวยากรณ์ก่อนที่จะ require เข้าโปรเจกต์ได้ก่อน
Composer dump-autoload
คำสั่งสำหรับ Composer เพื่อสร้างดัชนี autoload ใหม่ หลังจากวางคลาสที่สร้างโดยเครื่องมือนี้ลงในไดเรกทอรี src จำเป็นต้องรัน composer dump-autoload เพื่อให้ PSR-4 autoload รู้จัก
JSON_THROW_ON_ERROR
แฟล็กการจัดการข้อผิดพลาด json_decode() ใน PHP 7.3+; เมื่อเปิดใช้งาน ความล้มเหลวในการแยกวิเคราะห์ JSON จะโยนข้อยกเว้น JsonException ตัวอย่าง Laravel ของเครื่องมือนี้ใช้การแยกวิเคราะห์อย่างเข้มงวด
Hash (PHP)
ฟังก์ชันแฮชในตัวของ PHP มักใช้สำหรับการตรวจสอบลายเซ็น WebHook คลาส callback WebHook ที่สร้างโดยเครื่องมือนี้ทำงานกับ hash_hmac() สำหรับการตรวจสอบลายเซ็น

ตารางอ้างอิงการแมปประเภท JSON เป็นประเภท PHP

ประเภทข้อมูล JSON ที่เครื่องมืออนุมานอัตโนมัติและการอ้างอิงประเภท PHP ที่สอดคล้องกัน:

ตัวอย่างค่า JSONวิธีการตรวจจับประเภท PHP ที่สร้างค่าเริ่มต้นของคุณสมบัติ
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.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>)[]
{...} (อ็อบเจ็กต์ที่ซ้อนกัน)typeof value === 'object' && !Array.isArray(value)Xxx (คลาสอิสระ)new Xxx()

ตารางเปรียบเทียบ 4 สไตล์โค้ด PHP

4 สไตล์โค้ดคลาส PHP ที่เครื่องมือรองรับ; เลือกตามความต้องการของโปรเจกต์:

สไตล์โค้ดสืบทอด / มอดิไฟเออร์อินเทอร์เฟซที่นำไปใช้กรณีการใช้งาน
สไตล์ ArrayObjectextends \ArrayObjectimplements \JsonSerializableระบบนิเวศ Symfony Serializer ต้องการการเข้าถึงสไตล์อาร์เรย์ $obj['key'] ความเข้ากันได้กับไลบรารีมาตรฐาน PHP
สไตล์ stdClassextends \stdClassimplements \JsonSerializableWordPress REST API ความเข้ากันได้กับพฤติกรรมเริ่มต้น json_decode พาหะข้อมูลอ็อบเจ็กต์ที่มีน้ำหนักเบา
สไตล์ readonly classfinal readonly class (ไม่มีการสืบทอด)implements \JsonSerializablePHP 8.1+, DTO การตอบกลับ API อ็อบเจ็กต์ถ่ายโอนข้อมูลที่ไม่เปลี่ยนรูป รับประกันข้อมูลไม่ถูกแก้ไขหลังจากสร้าง
สไตล์การรวม Laravelไม่มีการสืบทอด (ค่าเริ่มต้น)implements \Jsonable, \Arrayable, \JsonSerializableLaravel Eloquent API Resource เลเยอร์โมเดล Eloquent การจัดรูปแบบการตอบกลับคอนโทรลเลอร์

Privacy & Security

การดำเนินการแยกวิเคราะห์ JSON, การสร้างคลาส PHP, การแพ็ก ZIP ทั้งหมดของเครื่องมือ JSON เป็น PHP นี้เสร็จสมบูรณ์ในเบราว์เซอร์ของคุณภายในเครื่องผ่าน JavaScript (quicktype-core + JSZip); ข้อมูล JSON ที่ป้อนและโค้ด PHP ที่สร้างไม่เคยอัปโหลดไปยังเซิร์ฟเวอร์ใดๆ ไม่ถูกบันทึก แคช หรือจัดเก็บไว้ในคลาวด์ JSON ที่ละเอียดอ่อนซึ่งมีฟิลด์อินเทอร์เฟซภายใน โครงสร้างธุรกิจที่ยังไม่เผยแพร่ การตอบกลับ API ที่ยังไม่ได้เผยแพร่สามารถใช้ได้อย่างปลอดภัย; ข้อมูลทั้งหมดจะถูกล้างเมื่อปิดหน้า เครื่องมือนี้ไม่ใช้คุกกี้ใดๆ สำหรับการติดตามผู้ใช้ ไม่รวบรวมอีเมลหรือข้อมูลบัญชี ไม่ฝังสคริปต์วิเคราะห์ของบุคคลที่สาม; การคำนวณทั้งหมดเสร็จสมบูรณ์ในกระบวนการเบราว์เซอร์ของอุปกรณ์ปัจจุบัน แม้ในสภาพแวดล้อมออฟไลน์ (เช่น ขาดการเชื่อมต่อหรือสภาพแวดล้อมอินทราเน็ตที่แยกออกจากกัน) ก็ทำงานได้ตามปกติตราบใดที่ทรัพยากรหน้าเว็บได้รับการโหลดครั้งเดียว

Authoritative References