Pengesah JSON

Pengesah sintaks JSON dalam talian yang canggih dan pemeriksa skema—sepenuhnya berasaskan penyemak imbas dan mengutamakan privasi.

Sahkan JSON anda dengan segera

Sahkan JSON dengan Skema
Versi skema yang disokong: Draf-07.

Validator JSON Dalam Talian Percuma ini membolehkan anda menyemak serta-merta data JSON anda untuk ralat sintaks dan isu struktur. Sama ada anda sedang memeriksa respons API mentah, fail konfigurasi, atau muatan berstruktur, alat kami menonjolkan masalah secara masa nyata dan turut menawarkan pembetulan automatik. Untuk pengesahan yang lebih ketat, tambahkan Skema JSON dan kuatkuasakan peraturan seperti medan wajib, jenis khusus, dan format (emel, URI, dan lain-lain). Alat ini sepenuhnya mematuhi Skema JSON Draf-07. Semua pemprosesan dilakukan dalam pelayar anda—data anda tidak pernah meninggalkan peranti anda.

Apakah Pengesahan JSON?

JSON (JavaScript Object Notation) adalah format pertukaran data ringan yang banyak digunakan, direka untuk mudah dibaca oleh manusia dan mudah diproses serta dijana oleh mesin. Tujuan utamanya adalah untuk mewakili data berstruktur—objek, tatasusunan, rentetan, nombor, boolean, dan nilai kosong—dengan cara yang tidak bergantung pada bahasa pengaturcaraan.

Pengesahan JSON adalah proses memeriksa secara programatik bahawa dokumen JSON adalah betul dari segi sintaks dan struktur. Ini melibatkan pemeriksaan dua aspek utama:

  • Pengesahan Sintaksis: Memastikan teks mentah mematuhi tatabahasa rasmi seperti yang ditetapkan oleh spesifikasi ECMA-404 JSON. Penafsir dalam kebanyakan bahasa pengaturcaraan moden (contohnya, JSON.parse() dalam JavaScript, json.loads() dalam Python, JSONDecoder dalam Java) menjangkakan sintaks yang sah dan akan memaparkan ralat jika input tidak betul.
  • Pengesahan Struktur (Skema): Selain sintaks, pengesahan skema memeriksa bahawa data JSON memenuhi struktur yang dijangka, termasuk jenis data, sifat wajib, kekangan nilai, dan objek/array bersarang. Pengesahan skema biasanya dilakukan menggunakan JSON Schema, yang menentukan peraturan untuk data yang dianggap sah.

Mengapa Sahkan JSON?

Pengesahan JSON adalah penting di mana-mana sahaja data diserialkan untuk penghantaran, penyimpanan, atau komunikasi antara perkhidmatan. Sebab-sebab utama termasuk:

  • Pencegahan Ralat: Mengesan dan melaporkan ralat sintaks (contohnya, koma yang hilang, kurungan yang tidak padan, aksara haram) dengan awal—sebelum cuba memproses data.
  • Integriti & Keselamatan Data: Tolak beban JSON yang salah bentuk atau berniat jahat, membantu mencegah kerosakan sistem backend, serangan suntikan, atau kerosakan data.
  • Keselamatan Jenis: Menegakkan pengetikan ketat—memastikan, contohnya, bahawa medan yang dijangka boolean tidak dihantar sebagai rentetan, atau bahawa UUID, emel, atau nombor mengikut format yang betul.
  • Keserasian Rentas Bahasa: Pastikan JSON yang dihasilkan dalam satu persekitaran (contohnya, Node.js) boleh digunakan dengan selamat dalam persekitaran lain (contohnya, Python, Go, Java), mengelakkan masalah pengekodan/penyahkod yang boleh menyebabkan pepijat.
  • Kebolehpeliharaan & Ketahanan: Struktur data yang disahkan meningkatkan kebolehlacakan dan mengurangkan risiko ralat yang sukar dikesan dalam fail konfigurasi, log, atau permintaan/respon API.
  • Privasi & Keselamatan: Pengesahan boleh dilakukan sepenuhnya di sisi klien (dalam pelayar), mengelakkan data mentah atau sensitif daripada dihantar keluar dari peranti pengguna untuk tujuan pengesahan.

Ralat Pengesahan JSON Biasa (dengan Contoh Terperinci)

Kunci Tanpa Petikan

Semua kekunci dalam objek JSON mestilah rentetan yang diapit dengan petikan berganda.

{ name: "Alice" }
{ "name": "Alice" }

Banyak format serupa JSON (contohnya, literal objek JavaScript) membenarkan kunci tanpa tanda petik, tetapi JSON standard tidak membenarkannya.

Petikan Tunggal

Rentetan JSON mesti menggunakan tanda petik berganda sahaja; tanda petik tunggal tidak dibenarkan.

{ 'name': 'Bob' }
{ "name": "Bob" }

Menggunakan tanda petik tunggal akan menyebabkan ralat pengurai dalam semua perpustakaan JSON yang mematuhi piawaian.

Koma Akhir

Tiada koma di akhir selepas item terakhir dalam objek atau tatasusunan.

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

Koma belakang mungkin berfungsi dalam JavaScript, tetapi tidak dalam pengurai JSON yang ketat.

Pelarian Watak yang Tidak Betul

Petikan dan aksara khas di dalam rentetan mesti diimbas menggunakan garis miring terbalik.

{ "quote": "Tom berkata \"hai\"" }
{ "quote": "Tom berkata \"hello\"" }

Urutan pelarian lain termasuk \\ untuk garis miring terbalik, \n untuk baris baru, dan \t untuk tab.

Jenis Data Tidak Betul

Rentetan tidak sepatutnya digunakan untuk nombor, booleans, atau null.

{ "enabled": "benar", "count": "10" }
{ "diaktifkan": benar, "kiraan": 10 }

JSON membezakan antara boolean, nombor, dan rentetan—pastikan jenis yang betul digunakan.

Kunci Bukan Primitif

Kunci objek JSON mesti sentiasa berupa rentetan; anda tidak boleh menggunakan nombor, boolean, atau jenis lain sebagai kunci.

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

Kunci Pendua

Walaupun dibenarkan oleh spesifikasi JSON, kunci berganda sering menjadi punca biasa masalah perisian.

{ "name": "Alice", "name": "Bob" }

Kebanyakan pengurai hanya akan menyimpan nilai terakhir ("Bob"), tanpa memberi amaran dan membuang nilai-nilai sebelumnya.

Penggunaan Komen

JSON standard tidak membenarkan komen, walaupun sesetengah penyunting menyokongnya.

{
  // Maklumat pengguna
  "name": "Alice"
}
{
  "name": "Alice"
}

Pengesahan Skema: Memastikan Struktur dan Jenis Data

JSON Schema adalah piawaian yang kuat untuk mentakrif dan mengesahkan struktur jangkaan dokumen JSON. Ia membolehkan anda menentukan:

  • Medan diperlukan (`required`)
  • Jenis data (`type`: string, nombor, boolean, objek, array, null)
  • Format rentetan (`format`: emel, uuid, tarikh-masa, dan lain-lain)
  • Pencocokan corak untuk rentetan (`pattern`)
  • Julat nombor (`minimum`, `maksimum`)
  • Panjang array dan pengesahan item (`minItems`, `maxItems`, `items`)
  • Pengesahan bertingkat untuk objek dan tatasusunan
  • Sekatan enum (`enum`)

Contoh: Skema Pengguna (Draf-07)

{
  "type": "objek",
  "properties": {
    "id":    { "type": "string", "format": "uuid" },
    "name":  { "type": "string", "minLength": 1 },
    "email": { "type": "string", "format": "emel" },
    "is_active": { "type": "boolean" }
  },
  "required": ["id", "name", "email"],
  "additionalProperties": false
}

Apa yang ini tegaskan:

  • id mesti merupakan rentetan UUID yang sah.
  • nama mesti berupa rentetan yang tidak kosong.
  • emel mesti mematuhi format emel standard.
  • is_active (pilihan) mesti berupa nilai boolean.
  • Tiada harta lain selain yang ditakrifkan di atas dibenarkan.

Contoh Dunia Sebenar: Mengesahkan Respons API Stripe

Andaikan anda menerima respons JSON daripada API Stripe (contohnya, PaymentIntent). Validasi skema dapat memastikan anda tidak pernah memproses data yang tidak lengkap atau jenis yang salah.

{
  "type": "objek",
  "properties": {
    "id":      { "type": "rentetan", "pattern": "^pi_" },
    "object":  { "type": "rentetan", "const": "payment_intent" },
    "amount":  { "type": "integer", "minimum": 1 },
    "currency":{"type": "rentetan", "minLength": 3, "maxLength": 3 },
    "status":  { "type": "rentetan", "enum": [
      "requires_payment_method",  
      "requires_confirmation",  
      "processing",  
      "succeeded",  
      "canceled"
    ]}
  },
  "required": ["id", "object", "amount", "currency", "status"],
  "additionalProperties": false
}
  • ID mesti bermula dengan "pi_"
  • objek mesti sentiasa "payment_intent"
  • jumlah mesti merupakan nombor bulat yang lebih besar atau sama dengan 1
  • mata wang mesti dalam bentuk tiga huruf (contoh: "usd", "eur")
  • status mesti salah satu daripada nilai yang ditetapkan

Manfaat

  • Pengesanan Ralat Awal: Tangkap perubahan API kritikal atau data tidak lengkap sebelum ia sampai ke logik perniagaan anda.
  • Ujian Automatik: Gunakan skema dalam saluran CI/CD untuk mengesahkan respons sebenar dan tiruan.
  • Konsistensi Antara Pasukan: Seragamkan kontrak data antara frontend, backend, dan API pihak ketiga.

Pengesahan JSON yang betul—meliputi kedua-dua sintaks dan skema—mengelakkan pepijat halus, menguatkuasakan amalan terbaik, dan melindungi aplikasi anda daripada input yang tidak sah atau berniat jahat. Sama ada digunakan dalam fail konfigurasi, muatan API, atau penghantaran mesej antara perkhidmatan, pengesahan yang kukuh adalah asas penting untuk sistem perisian moden.

Privasi & Keselamatan

Semua pengesahan dan pemeriksaan skema dijalankan secara tempatan dalam pelayar anda. Tiada data dimuat naik atau direkodkan. JSON anda kekal sepenuhnya peribadi.

Contoh Kod untuk Pengesahan JSON

Lihat cara memvalidasi JSON dalam pelbagai bahasa pengaturcaraan menggunakan perpustakaan terbina dalam atau rangka kerja popular. Contoh-contoh ini menunjukkan kedua-dua validasi sintaks dan validasi skema.

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)
  }
}

Tentang alat ini

Alat ini dibangunkan oleh pasukan di Itself Tools, pencipta pelbagai utiliti dalam talian pantas dan berfokuskan privasi yang digunakan oleh jutaan pengguna di seluruh dunia. Dengan pengalaman bertahun-tahun dalam membangunkan alat berasaskan pelayar yang mengutamakan kesederhanaan, kelajuan, dan kebolehpercayaan, kami telah berkembang ke aplikasi berorientasikan pembangun seperti ini—direka untuk memudahkan tugas teknikal bagi pengaturcara, penganalisis, dan profesional digital.