เครื่องตรวจสอบ JSON

เครื่องมือตรวจสอบไวยากรณ์ JSON และตรวจสอบสคีมาขั้นสูงออนไลน์—ใช้งานผ่านเบราว์เซอร์อย่างเต็มรูปแบบและเน้นความเป็นส่วนตัวเป็นหลัก

ตรวจสอบ JSON ของคุณทันที

ตรวจสอบ JSON ด้วยแผนผัง
รองรับเวอร์ชันสคีมา: ร่าง-07.

เครื่องมือ JSON Validator ออนไลน์ฟรีนี้ช่วยให้คุณตรวจสอบข้อมูล JSON ของคุณได้ทันทีเพื่อหาข้อผิดพลาดทางไวยากรณ์และปัญหาโครงสร้าง ไม่ว่าคุณจะตรวจสอบผลลัพธ์ API ดิบ ไฟล์การตั้งค่า หรือข้อมูลโครงสร้าง เครื่องมือของเราจะแสดงจุดผิดพลาดแบบเรียลไทม์และยังมีฟีเจอร์แก้ไขอัตโนมัติ สำหรับการตรวจสอบอย่างเข้มงวดยิ่งขึ้น คุณสามารถเพิ่ม JSON Schema เพื่อบังคับใช้กฎต่างๆ เช่น ฟิลด์ที่จำเป็น ประเภทข้อมูลเฉพาะ และรูปแบบ (อีเมล, URI ฯลฯ) เครื่องมือนี้รองรับมาตรฐาน JSON Schema Draft-07 อย่างเต็มที่ การประมวลผลทั้งหมดเกิดขึ้นภายในเบราว์เซอร์ของคุณ—ข้อมูลของคุณจะไม่ถูกส่งออกนอกเครื่อง

JSON Validation คืออะไร?

JSON (JavaScript Object Notation) เป็นรูปแบบแลกเปลี่ยนข้อมูลที่ได้รับความนิยมอย่างแพร่หลาย น้ำหนักเบา ออกแบบมาให้สามารถอ่านเข้าใจได้ง่ายสำหรับมนุษย์ และง่ายต่อการประมวลผลโดยเครื่องจักร จุดประสงค์หลักคือการแสดงข้อมูลที่มีโครงสร้าง—เช่น อ็อบเจ็กต์, อาร์เรย์, สตริง, ตัวเลข, บูลีน และค่าว่าง—ในรูปแบบที่ไม่ขึ้นกับภาษาใดๆ

การตรวจสอบความถูกต้องของ JSON คือกระบวนการตรวจสอบโดยโปรแกรมว่าเอกสาร JSON นั้นถูกต้องทั้งในแง่ไวยากรณ์และโครงสร้าง ซึ่งรวมถึงการตรวจสอบสองประเด็นหลักดังนี้:

  • การตรวจสอบความถูกต้องทางวากยสัมพันธ์: ตรวจสอบให้แน่ใจว่าข้อความดิบเป็นไปตามไวยากรณ์อย่างเป็นทางการตามที่กำหนดไว้ในข้อกำหนด ECMA-404 JSON ตัวแยกวิเคราะห์ (parsers) ในภาษาการเขียนโปรแกรมสมัยใหม่ส่วนใหญ่ (เช่น JSON.parse() ใน JavaScript, json.loads() ใน Python, JSONDecoder ใน Java) จะคาดหวังไวยากรณ์ที่ถูกต้องและจะเกิดข้อผิดพลาดหากข้อมูลนำเข้ามีความผิดปกติ
  • การตรวจสอบโครงสร้าง (สคีมา): นอกเหนือจากไวยากรณ์ การตรวจสอบความถูกต้องของสกีมา (schema validation) จะช่วยตรวจสอบว่า ข้อมูล JSON ตรงกับโครงสร้างที่คาดไว้หรือไม่ รวมถึงประเภทข้อมูล คุณสมบัติที่จำเป็น ข้อจำกัดของค่า และโครงสร้างวัตถุ/อาร์เรย์ที่ซ้อนกัน การตรวจสอบความถูกต้องของสกีมามักทำโดยใช้ JSON Schema ซึ่งกำหนดกฎเกณฑ์สำหรับข้อมูลที่ถือว่าถูกต้อง

ทำไมต้องตรวจสอบความถูกต้องของ JSON?

การตรวจสอบความถูกต้องของ JSON เป็นสิ่งสำคัญในทุกกรณีที่ข้อมูลถูกจัดเก็บหรือส่งผ่าน ไม่ว่าจะเป็นการส่งข้อมูล การเก็บบันทึกข้อมูล หรือการสื่อสารระหว่างบริการ เหตุผลสำคัญได้แก่:

  • การป้องกันข้อผิดพลาด: ตรวจจับและรายงานข้อผิดพลาดทางไวยากรณ์ (เช่น การลืมหรือขาดเครื่องหมายจุลภาค วงเล็บไม่ตรงกัน ตัวอักษรที่ไม่ถูกต้อง) ตั้งแต่เนิ่นๆ ก่อนที่จะดำเนินการประมวลผลข้อมูล
  • ความสมบูรณ์และความปลอดภัยของข้อมูล: ปฏิเสธข้อมูล JSON ที่ผิดรูปแบบหรือมีเจตนาร้าย ช่วยป้องกันการล่มของระบบหลังบ้าน การโจมตีแบบฉีดโค้ด และการทำลายข้อมูล
  • ความปลอดภัยของประเภทข้อมูล: บังคับใช้การพิมพ์ชนิดอย่างเข้มงวด—เพื่อให้แน่ใจว่า เช่น ฟิลด์ที่คาดหวังว่าจะเป็นบูลีนจะไม่ถูกส่งเป็นสตริง หรือว่า UUID อีเมล หรือหมายเลข จะต้องเป็นไปตามรูปแบบที่ถูกต้อง
  • ความเข้ากันได้ข้ามภาษา: รับประกันว่า JSON ที่สร้างขึ้นในสภาพแวดล้อมหนึ่ง (เช่น Node.js) จะสามารถใช้งานได้อย่างปลอดภัยในสภาพแวดล้อมอื่น (เช่น Python, Go, Java) โดยไม่เกิดข้อผิดพลาดในการแปลงข้อมูล (serialization/deserialization)
  • ความสามารถในการบำรุงรักษาและความทนทาน: โครงสร้างข้อมูลที่ผ่านการตรวจสอบช่วยเพิ่มความสามารถในการติดตามและลดความเสี่ยงของข้อผิดพลาดที่ตรวจสอบและแก้ไขได้ยากในไฟล์การกำหนดค่า บันทึก หรือคำขอ/ตอบสนอง API
  • ความเป็นส่วนตัวและความปลอดภัย: การตรวจสอบความถูกต้องสามารถทำได้ทั้งหมดในฝั่งลูกค้า (ภายในเบราว์เซอร์) ซึ่งช่วยป้องกันไม่ให้ข้อมูลดิบหรือข้อมูลที่ละเอียดอ่อนถูกส่งออกจากอุปกรณ์ของผู้ใช้เพื่อการตรวจสอบ

ข้อผิดพลาดในการตรวจสอบ JSON ที่พบบ่อย (พร้อมตัวอย่างละเอียด)

คีย์ที่ไม่มีเครื่องหมายคำพูด

คีย์ทั้งหมดในอ็อบเจ็กต์ JSON ต้องเป็นสตริงที่มีเครื่องหมายคำพูดคู่เท่านั้น

{ name: "อลิซ" }
{ "name": "อลิซ" }

รูปแบบข้อมูลหลายชนิดที่คล้ายกับ JSON (เช่น อ็อบเจ็กต์ลิตเทอรัลของ JavaScript) อนุญาตให้ใช้กุญแจที่ไม่ต้องมีเครื่องหมายคำพูดได้ แต่ JSON มาตรฐานจะต้องมีเครื่องหมายคำพูดครอบกุญแจเสมอ

เครื่องหมายคำพูดเดี่ยว

สตริง JSON ต้องใช้เครื่องหมายคำพูดคู่เท่านั้น; ไม่อนุญาตให้ใช้เครื่องหมายคำพูดเดี่ยว

{ 'name': 'บ็อบ' }
{ "name": "บ็อบ" }

การใช้เครื่องหมายอัญประกาศเดี่ยวจะทำให้เกิดข้อผิดพลาดในการวิเคราะห์ไวยากรณ์ในไลบรารี JSON ที่เป็นไปตามมาตรฐานทั้งหมด

การใส่ลูกน้ำท้ายบรรทัด

ไม่ใส่เครื่องหมายจุลภาคหลังรายการสุดท้ายในออบเจ็กต์หรืออาร์เรย์

{
  "a": 1,
  "b": 2,
}
{
  "a": 1,
  "b": 2
}

ลูกน้ำท้ายรายการอาจใช้ได้ใน JavaScript แต่ไม่สามารถใช้ในตัวแยกวิเคราะห์ JSON ที่เข้มงวดได้

การหนีอักขระไม่ถูกต้อง

เครื่องหมายคำพูดและอักขระพิเศษภายในสตริงต้องมีการใส่เครื่องหมายแบ็คสแลชเพื่อหนีอักขระ

{ "quote": "ทอมกล่าวว่า \"สวัสดี\"" }
{ "quote": "ทอมกล่าวว่า \"สวัสดี\"" }

ลำดับการหลีกเลี่ยงอื่น ๆ ได้แก่ \\ สำหรับแบ็คสแลช, \n สำหรับการขึ้นบรรทัดใหม่, และ \t สำหรับแท็บ

ประเภทข้อมูลไม่ถูกต้อง

ไม่ควรใช้สตริงสำหรับตัวเลข, บูลีน หรือค่า null.

{ "enabled": "เปิดใช้งาน", "count": "10" }
{ "เปิดใช้งาน": true, "จำนวน": 10 }

JSON แยกความแตกต่างระหว่างบูลีน ตัวเลข และสตริง—ตรวจสอบให้แน่ใจว่าใช้ประเภทข้อมูลที่ถูกต้องเพื่อความแม่นยำและประสิทธิภาพ

คีย์ที่ไม่ใช่แบบพื้นฐาน

คีย์ของออบเจ็กต์ JSON ต้องเป็นสตริงเสมอ; คุณไม่สามารถใช้ตัวเลข, ค่าบูลีน หรือประเภทอื่น ๆ เป็นคีย์ได้

{ 123: "abc" }
{ "123": "abc" }

คีย์ซ้ำ

แม้ว่าจะได้รับอนุญาตตามสเปคของ JSON แต่การใช้คีย์ซ้ำกันมักเป็นสาเหตุหลักของบั๊กในโปรแกรม

{ "name": "อลิซ", "name": "บ็อบ" }

เครื่องมือวิเคราะห์ข้อมูลส่วนใหญ่จะเก็บเพียงค่าล่าสุด ("Bob") เท่านั้น โดยจะละเว้นค่าก่อนหน้าทั้งหมดอย่างเงียบ ๆ

การใช้งานคอมเมนต์

JSON มาตรฐานไม่อนุญาตให้ใส่คอมเมนต์ แม้ว่าบางโปรแกรมแก้ไขจะรองรับก็ตาม

{
  // ข้อมูลผู้ใช้
  "name": "อลิซ"
}
{
  "name": "อลิซ"
}

การตรวจสอบสคีมา: การบังคับใช้โครงสร้างและประเภทข้อมูล

JSON Schema คือมาตรฐานที่ทรงพลังสำหรับการกำหนดและตรวจสอบโครงสร้างที่คาดหวังของเอกสาร JSON ช่วยให้คุณสามารถระบุได้ว่า:

  • ฟิลด์ที่จำเป็น (`required`)
  • ประเภทข้อมูล (`type`: ข้อความ, ตัวเลข, บูลีน, วัตถุ, อาร์เรย์, ค่า null)
  • รูปแบบสตริง (`format`: อีเมล, uuid, วัน-เวลา, ฯลฯ)
  • การจับคู่รูปแบบสำหรับสตริง (`pattern`)
  • ช่วงของตัวเลข (`minimum`, `maximum`)
  • การตรวจสอบความยาวอาร์เรย์และรายการ (`minItems`, `maxItems`, `items`)
  • การตรวจสอบความถูกต้องซ้อนสำหรับอ็อบเจ็กต์และอาร์เรย์
  • ข้อจำกัดแบบเอนั่ม (`enum`)

ตัวอย่าง: โครงสร้างผู้ใช้ (ร่าง-07)

{
  "type": "วัตถุ",
  "properties": {
    "id":    { "type": "สตริง", "format": "uuid" },
    "name":  { "type": "สตริง", "minLength": 1 },
    "email": { "type": "สตริง", "format": "อีเมล" },
    "is_active": { "type": "บูลีน" }
  },
  "required": ["id", "name", "email"],
  "additionalProperties": false
}

สิ่งที่สิ่งนี้บังคับใช้:

  • รหัสประจำตัวต้องเป็นสตริง UUID ที่ถูกต้องตามมาตรฐาน
  • ชื่อจะต้องเป็นสตริงที่ไม่ว่างเปล่า
  • อีเมลต้องตรงกับรูปแบบอีเมลมาตรฐาน
  • is_active (ไม่บังคับ) ต้องเป็นค่าบูลีนเท่านั้น
  • ไม่อนุญาตให้มีคุณสมบัตินอกเหนือจากที่กำหนดไว้ข้างต้น

ตัวอย่างจริง: การตรวจสอบการตอบกลับ API ของ Stripe

สมมติว่าคุณได้รับการตอบกลับ JSON จาก API ของ Stripe (เช่น PaymentIntent) การตรวจสอบสคีมาจะช่วยให้มั่นใจได้ว่าคุณจะไม่ประมวลผลข้อมูลที่ไม่ครบถ้วนหรือข้อมูลที่มีประเภทผิดพลาด

{
  "type": "วัตถุ",
  "properties": {
    "id": { "type": "สตริง", "pattern": "^pi_" },
    "object": { "type": "สตริง", "const": "payment_intent" },
    "amount": { "type": "จำนวนเต็ม", "minimum": 1 },
    "currency": { "type": "สตริง", "minLength": 3, "maxLength": 3 },
    "status": { "type": "สตริง", "enum": [
      "ต้องการวิธีการชำระเงิน",
      "ต้องการการยืนยัน",
      "กำลังประมวลผล",
      "ชำระเงินสำเร็จ",
      "ยกเลิก"
    ]}
  },
  "required": ["id", "object", "amount", "currency", "status"],
  "additionalProperties": false
}
  • รหัสต้องเริ่มต้นด้วย "pi_"
  • วัตถุจะต้องเป็น "payment_intent" เสมอ
  • จำนวนต้องเป็นจำนวนเต็มและมีค่ามากกว่าหรือเท่ากับ 1
  • สกุลเงินต้องเป็นสตริง 3 ตัวอักษร (เช่น "usd", "eur")
  • สถานะต้องเป็นหนึ่งในค่าที่กำหนดไว้

ประโยชน์

  • ตรวจจับข้อผิดพลาดล่วงหน้า: พบความเปลี่ยนแปลง API ที่ทำให้เกิดปัญหาหรือข้อมูลไม่สมบูรณ์ก่อนที่จะส่งผลกระทบต่อระบบธุรกิจของคุณ
  • การทดสอบอัตโนมัติ: ใช้สคีมาในกระบวนการ CI/CD เพื่อยืนยันผลตอบกลับจริงและตัวอย่าง
  • ความสม่ำเสมอระหว่างทีม: มาตรฐานข้อตกลงข้อมูลระหว่างส่วนหน้า ส่วนหลัง และ API จากบุคคลที่สาม

การตรวจสอบ JSON ที่ถูกต้อง—ทั้งในด้านไวยากรณ์และโครงสร้าง—ช่วยป้องกันข้อผิดพลาดที่ซับซ้อน ส่งเสริมแนวปฏิบัติที่ดีที่สุด และเพิ่มความปลอดภัยให้แอปพลิเคชันของคุณจากข้อมูลที่ผิดรูปแบบหรือเป็นอันตราย ไม่ว่าจะใช้ในไฟล์กำหนดค่า ข้อมูล API หรือการสื่อสารระหว่างบริการ การตรวจสอบที่มีประสิทธิภาพคือพื้นฐานสำคัญของระบบซอฟต์แวร์สมัยใหม่

ความเป็นส่วนตัวและความปลอดภัย

การตรวจสอบความถูกต้องและโครงสร้างทั้งหมดทำงานบนเบราว์เซอร์ของคุณโดยตรง ไม่มีการอัปโหลดหรือบันทึกข้อมูล ข้อมูล JSON ของคุณจะเป็นความลับอย่างสมบูรณ์

ตัวอย่างโค้ดสำหรับการตรวจสอบ JSON

ดูวิธีการตรวจสอบความถูกต้องของ JSON ในภาษาการเขียนโปรแกรมต่างๆ โดยใช้ไลบรารีมาตรฐานหรือเฟรมเวิร์กที่เป็นที่นิยม ตัวอย่างเหล่านี้แสดงการตรวจสอบความถูกต้องทั้งไวยากรณ์ (syntax validation) และการตรวจสอบตามโครงสร้างข้อมูล (schema validation)

JavaScript (Node.js)
Install: Standard library
const jsonString = '{"name":"Alice","age":30}';
try {
  const obj = JSON.parse(jsonString);
  console.log("Valid JSON:", obj);
} catch (e) {
  console.error("Invalid JSON!", e.message);
}
JavaScript (Node.js) with ajv (Schema validation)
Install: npm install ajv
const Ajv = require("ajv");
const ajv = new Ajv();
const schema = { type: "object", properties: { age: { type: "integer" } }, required: ["age"] };
const data = { age: 30 };
const validate = ajv.compile(schema);
console.log(validate(data) ? "Valid!" : ajv.errorsText(validate.errors));
Python
Install: Standard library (json)
import json
try:
    obj = json.loads('{"name":"Alice","age":30}')
    print("Valid JSON:", obj)
except json.JSONDecodeError as e:
    print("Invalid JSON:", e)
Python with jsonschema
Install: pip install jsonschema
import json, jsonschema
schema = {
    "type": "object",
    "properties": { "age": { "type": "integer" } },
    "required": ["age"]
}
data = {"age": 30}
try:
    jsonschema.validate(data, schema)
    print("Valid!")
except jsonschema.ValidationError as e:
    print("Schema validation error:", e)
Go
Install: Standard library (encoding/json)
package main
import (
  "encoding/json"
  "fmt"
)
func main() {
  data := []byte(`{"name":"Alice","age":30}`)
  var obj map[string]interface{}
  if err := json.Unmarshal(data, &obj); err != nil {
    fmt.Println("Invalid JSON:", err)
  } else {
    fmt.Println("Valid JSON:", obj)
  }
}
Java
Install: com.fasterxml.jackson.core:jackson-databind
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
  public static void main(String[] args) {
    String json = "{"name":"Alice","age":30}";
    try {
      Object obj = new ObjectMapper().readTree(json);
      System.out.println("Valid JSON: " + obj);
    } catch (Exception e) {
      System.out.println("Invalid JSON: " + e.getMessage());
    }
  }
}
C#
Install: Standard library (System.Text.Json)
using System;
using System.Text.Json;
class Program {
  static void Main() {
    string json = "{"name":"Alice","age":30}";
    try {
      var doc = JsonDocument.Parse(json);
      Console.WriteLine("Valid JSON!");
    } catch (JsonException e) {
      Console.WriteLine("Invalid JSON: " + e.Message);
    }
  }
}
PHP
Install: Standard library (json_decode)
<?php
$json = '{"name":"Alice","age":30}';
$obj = json_decode($json);
if (json_last_error() === JSON_ERROR_NONE) {
  echo "Valid JSON";
} else {
  echo "Invalid JSON: " . json_last_error_msg();
}
Ruby
Install: Standard library (json)
require 'json'
begin
  obj = JSON.parse('{"name":"Alice","age":30}')
  puts "Valid JSON!"
rescue JSON::ParserError => e
  puts "Invalid JSON: #{e.message}"
end
Bash (Linux/macOS) with jq
Install: brew install jq (or apt-get install jq)
echo '{"name":"Alice","age":30}' | jq empty && echo "Valid" || echo "Invalid"
Rust
Install: cargo add serde_json
fn main() {
  let data = r#"{"name":"Alice","age":30}"#;
  match serde_json::from_str::<serde_json::Value>(data) {
    Ok(_) => println!("Valid JSON!"),
    Err(e) => println!("Invalid JSON: {}", e),
  }
}
Kotlin
Install: Standard library (org.json)
import org.json.JSONObject
fun main() {
  try {
    val obj = JSONObject("{\"name\":\"Alice\",\"age\":30}")
    println("Valid JSON: $obj")
  } catch (e: Exception) {
    println("Invalid JSON: ${e.message}")
  }
}
Swift
Install: Standard library (JSONSerialization)
import Foundation
let json = "{\"name\":\"Alice\",\"age\":30}"
if let data = json.data(using: .utf8) {
  do {
    let _ = try JSONSerialization.jsonObject(with: data)
    print("Valid JSON!")
  } catch {
    print("Invalid JSON: \(error)")
  }
}
TypeScript
Install: Standard library
const jsonString = '{"name":"Alice","age":30}';
try {
  const obj = JSON.parse(jsonString);
  console.log("Valid JSON:", obj);
} catch (e) {
  console.error("Invalid JSON!", e.message);
}
SQL (PostgreSQL)
Install: Standard (with jsonb functions)
SELECT '{"name":"Alice","age":30}'::jsonb; -- Will error if not valid JSON
MySQL
Install: Standard (5.7+)
SELECT JSON_VALID('{"name":"Alice","age":30}');
PowerShell
Install: Standard
$json = '{"name":"Alice","age":30}'
try {
  $obj = $json | ConvertFrom-Json
  Write-Output "Valid JSON!"
} catch {
  Write-Output "Invalid JSON: $($_.Exception.Message)"
}
Perl
Install: cpan JSON
use JSON;
my $str = '{"name":"Alice","age":30}';
eval { decode_json($str) };
print $@ ? "Invalid JSON: $@" : "Valid JSON!";
Dart
Install: Standard library (dart:convert)
import 'dart:convert';
void main() {
  const jsonString = '{"name":"Alice","age":30}';
  try {
    final obj = jsonDecode(jsonString);
    print('Valid JSON: $obj');
  } catch (e) {
    print('Invalid JSON: $e');
  }
}
Elixir
Install: mix deps.get jason
json = ~s({"name":"Alice","age":30})
case Jason.decode(json) do
  {:ok, _} -> IO.puts("Valid JSON!")
  {:error, err} -> IO.puts("Invalid JSON: #{err}")
end
Scala
Install: libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.4"
import play.api.libs.json._
object Main extends App {
  val str = """{"name":"Alice","age":30}"""
  try {
    val json = Json.parse(str)
    println("Valid JSON!")
  } catch {
    case e: Exception => println("Invalid JSON: " + e.getMessage)
  }
}

เกี่ยวกับเครื่องมือนี้

เครื่องมือนี้พัฒนาโดยทีมงานที่ Itself Tools ผู้สร้างเครื่องมือออนไลน์หลากหลายประเภทที่รวดเร็วและให้ความสำคัญกับความเป็นส่วนตัว ใช้งานโดยผู้คนนับล้านทั่วโลก ด้วยประสบการณ์หลายปีในการสร้างเครื่องมือบนเบราว์เซอร์ที่เน้นความเรียบง่าย ความเร็ว และความน่าเชื่อถือ เราได้ขยายขอบเขตสู่แอปพลิเคชันที่มุ่งเน้นนักพัฒนา เช่นเครื่องมือนี้ ที่ออกแบบมาเพื่อช่วยให้งานทางเทคนิคง่ายขึ้นสำหรับโปรแกรมเมอร์ นักวิเคราะห์ และมืออาชีพด้านดิจิทัล