ToolDeck

JSON স্কিমা যাচাইকারী

JSON Schema (Draft 7) এর বিপরীতে JSON ডেটা যাচাই করুন

একটি উদাহরণ চেষ্টা করুন

JSON ডেটা

JSON স্কিমা

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ

JSON Schema ভ্যালিডেশন কী?

JSON Schema ভ্যালিডেশন হলো একটি JSON ডকুমেন্ট কোনো JSON Schema-তে সংজ্ঞায়িত কাঠামোগত এবং মানগত সীমাবদ্ধতা মেনে চলছে কি না তা যাচাই করার প্রক্রিয়া। স্কিমাটি নিজেই একটি JSON ডকুমেন্ট যা আপনার ডেটার প্রত্যাশিত রূপ বর্ণনা করে: কোন প্রপার্টিগুলো আবশ্যক, সেগুলো কোন ধরনের হতে হবে, সংখ্যার অনুমোদিত পরিসর, স্ট্রিং প্যাটার্ন, অ্যারের দৈর্ঘ্য এবং আরো অনেক কিছু। JSON Schema স্পেসিফিকেশন json-schema.org-এ মেইনটেইন করা হয় এবং IETF ড্রাফট হিসেবে প্রকাশিত হয় — Draft 7 এবং Draft 2020-12 সবচেয়ে বেশি ব্যবহৃত।

সাধারণ JSON ভ্যালিডেশন শুধু সিনট্যাক্স যাচাই করে (বন্ধনীগুলো মিলছে কি? স্ট্রিংগুলো কোটেড কি?), কিন্তু Schema ভ্যালিডেশন আরো গভীরে যায়। এটি এমন প্রশ্নের উত্তর দেয়: এই API-এর রেসপন্সে কি সবসময় পূর্ণসংখ্যা হিসেবে একটি "id" ফিল্ড থাকে? "status" ফিল্ডটি কি তিনটি অনুমোদিত মানের একটি? নেস্টেড অবজেক্টগুলো কি সঠিকভাবে গঠিত? এই ধরনের কাঠামোগত যাচাই এমন বাগ ধরে যা সিনট্যাক্স পরীক্ষা সম্পূর্ণ মিস করে — কারণ সিনট্যাক্টিক্যালি বৈধ JSON আপনার অ্যাপ্লিকেশনের জন্য অর্থগতভাবে ভুল হতে পারে।

JSON Schema, OpenAPI/Swagger স্পেসিফিকেশনে, কনফিগারেশন ফাইল ভ্যালিডেশন, ফর্ম ভ্যালিডেশন, ডেটাবেস ডকুমেন্ট সীমাবদ্ধতা এবং স্বয়ংক্রিয় পরীক্ষায় ব্যবহৃত হয়। Ajv (JavaScript), jsonschema (Python) এবং check-jsonschema (CLI)-এর মতো টুলগুলো স্পেসিফিকেশন বাস্তবায়ন করে যাতে আপনি প্রোগ্রামেটিক্যালি ডেটা যাচাই করতে পারেন। এই অনলাইন ভ্যালিডেটর আপনাকে কোনো লাইব্রেরি ইনস্টল না করে একটি Schema এবং একটি ডেটা ডকুমেন্ট উভয়ই পেস্ট করে তাৎক্ষণিকভাবে সামঞ্জস্য যাচাই করতে দেয়।

অনলাইন JSON Schema ভ্যালিডেটর কেন ব্যবহার করবেন?

হাতে স্কিমা লেখা এবং ভ্যালিডেশন ত্রুটি ডিবাগ করা ধীর প্রক্রিয়া। একটি অনলাইন JSON Schema ভ্যালিডেটর আপনার ডেটা স্কিমার সাথে মিলছে কি না সে বিষয়ে তাৎক্ষণিক প্রতিক্রিয়া দেয় — স্পষ্ট ত্রুটি বার্তা সহ যা ঠিক কোন প্রপার্টি ব্যর্থ হয়েছে তা নির্দেশ করে।

তাৎক্ষণিক ভ্যালিডেশন প্রতিক্রিয়া
আপনার স্কিমা এবং ডেটা পেস্ট করুন, এবং রিয়েল টাইমে ভ্যালিডেশন ফলাফল দেখুন। প্রতিটি ত্রুটি JSON পথ এবং নির্দিষ্ট সীমাবদ্ধতা যা ব্যর্থ হয়েছে তা দেখায় — ভ্যালিডেটর লাইব্রেরির আউটপুট না পড়েই সমস্যা সমাধান করতে পারবেন।
🔒
সম্পূর্ণ ব্রাউজারে — কোনো সার্ভার নেই
আপনার JSON ডেটা কখনো ব্রাউজার ছেড়ে যায় না। সমস্ত ভ্যালিডেশন JavaScript-এ স্থানীয়ভাবে চলে। কোনো সার্ভার নেই, কোনো লগ নেই, কোনো ডেটা সংরক্ষণ নেই। অভ্যন্তরীণ API স্পেক বা মালিকানা ফিল্ডের নাম ধারণকারী স্কিমার জন্য নিরাপদ।
🎯
Draft ভার্সন সাপোর্ট
ভ্যালিডেটর Draft 7 স্কিমা কীওয়ার্ড সমর্থন করে — type, required, properties, enum, pattern, minimum/maximum, items, anyOf, oneOf, allOf এবং additionalProperties সহ। আপনার বিল্ড পাইপলাইন বা টেস্ট স্যুটে যুক্ত করার আগে এখানে আপনার স্কিমা পরীক্ষা করুন।
📋
কোনো অ্যাকাউন্ট বা ইনস্টলেশন নেই
পেজ খুলুন, JSON পেস্ট করুন এবং যাচাই করুন। কোনো npm install নেই, কোনো pip প্যাকেজ নেই, কোনো Docker ইমেজ নেই। যে মেশিনে ডেভেলপমেন্ট টুল ইনস্টল করা সম্ভব নয় সেখানে দ্রুত স্কিমা যাচাইয়ের প্রয়োজন হলে কার্যকর।

JSON Schema ভ্যালিডেশনের ব্যবহারের ক্ষেত্র

API চুক্তি পরীক্ষা
আপনার OpenAPI স্পেকে সংজ্ঞায়িত স্কিমার বিপরীতে API রেসপন্স যাচাই করুন। একটি ফিল্ড integer থেকে string-এ পরিবর্তন হওয়ার মতো ব্রেকিং পরিবর্তনগুলো প্রোডাকশনে পৌঁছানোর আগেই ধরুন।
কনফিগারেশন ফাইল যাচাই
CI/CD পাইপলাইন, Kubernetes ম্যানিফেস্ট বা অ্যাপ্লিকেশন সেটিংসের JSON কনফিগ ফাইলগুলো কমিট করার আগে প্রত্যাশিত স্কিমার সাথে মিলছে কি না যাচাই করুন। অনুপস্থিত বা ভুল টাইপ করা কী-এর কারণে ডিপ্লয়মেন্ট ব্যর্থতা প্রতিরোধ করে।
DevOps পাইপলাইন গেট
চুক্তি লঙ্ঘনকারী পেলোড প্রত্যাখ্যান করতে CI ধাপ হিসেবে Schema ভ্যালিডেশন যুক্ত করুন। Terraform ভেরিয়েবল ফাইল, GitHub Actions ইনপুট বা স্বয়ংক্রিয়করণ দ্বারা ব্যবহৃত যেকোনো কাঠামোগত JSON-এর জন্য কার্যকর।
QA এবং টেস্ট ডেটা পর্যালোচনা
টেস্ট ফিক্সচার এবং মক ডেটা ফাইলগুলো আপনার অ্যাপ্লিকেশনের প্রত্যাশিত একই স্কিমা মেনে চলছে কি না যাচাই করুন। অমিল টেস্ট ডেটা false positive টেস্ট রেজাল্টের একটি সাধারণ কারণ।
ডেটা পাইপলাইন ইনজেশন
ডেটা পাইপলাইনের প্রান্তে আগত JSON রেকর্ড যাচাই করুন। Schema ভ্যালিডেশন ত্রুটিপূর্ণ ইভেন্টগুলো আপনার ডেটা ওয়্যারহাউসে পৌঁছানোর আগেই ফিল্টার করে — পরবর্তীতে পরিষ্কারের খরচ কমায়।
JSON Schema সিনট্যাক্স শেখা
ইন্টারেক্টিভভাবে স্কিমা কীওয়ার্ড নিয়ে পরীক্ষা করুন। একটি স্কিমা লিখুন, টেস্ট ডেটা পেস্ট করুন এবং দেখুন কোন সীমাবদ্ধতাগুলো পাস বা ফেল করে। প্রতিবার টার্মিনাল থেকে একটি স্ক্রিপ্ট লিখে চালানোর চেয়ে অনেক দ্রুত।

JSON Schema কীওয়ার্ড রেফারেন্স

JSON Schema কীওয়ার্ডের একটি সংগ্রহ দিয়ে গঠিত, যার প্রতিটি যাচাইকৃত ডেটার উপর একটি সীমাবদ্ধতা আরোপ করে। নিচের তালিকায় Draft 7 এবং পরবর্তী সংস্করণে সবচেয়ে বেশি ব্যবহৃত কীওয়ার্ডগুলো রয়েছে। প্রতিটি কীওয়ার্ড একই স্কিমা অবজেক্টে অন্যগুলোর সাথে মিলিয়ে ব্যবহার করা যায়।

কীওয়ার্ডউদ্দেশ্যউদাহরণ
typeRestricts the data type"type": "string"
propertiesDefines expected object keys and their schemas"properties": { "name": { "type": "string" } }
requiredLists mandatory properties"required": ["id", "name"]
itemsSchema for array elements"items": { "type": "number" }
enumRestricts value to a fixed set"enum": ["active", "inactive"]
patternRegex constraint on strings"pattern": "^[A-Z]{2}\\d{4}$"
minimum / maximumNumeric range bounds"minimum": 0, "maximum": 100
minLength / maxLengthString length bounds"minLength": 1, "maxLength": 255
$refReuses another schema by URI"$ref": "#/$defs/address"
additionalPropertiesControls extra keys in objects"additionalProperties": false
anyOf / oneOf / allOfCombines multiple schemas logically"anyOf": [{ "type": "string" }, { "type": "null" }]
if / then / elseConditional schema application"if": { "properties": { "type": { "const": "email" } } }

JSON Schema Draft তুলনা: Draft 7 বনাম 2019-09 বনাম 2020-12

JSON Schema বেশ কয়েকটি Draft সংস্করণের মধ্য দিয়ে গেছে। Draft 7 (2018 সালে প্রকাশিত) টুলিং-এ সবচেয়ে বেশি সমর্থিত। Draft 2019-09 $defs (definitions-এর পরিবর্তে), unevaluatedProperties এবং $recursiveRef চালু করেছিল। Draft 2020-12 (সর্বশেষ স্থিতিশীল রিলিজ) $recursiveRef-কে $dynamicRef দিয়ে প্রতিস্থাপন করেছে এবং tuple ভ্যালিডেশনের জন্য prefixItems চালু করেছে। Draft বেছে নেওয়ার সময় আপনার ভ্যালিডেশন লাইব্রেরি সেটি সমর্থন করে কিনা যাচাই করুন। Ajv তিনটি Draft-ই সমর্থন করে। Python-এর jsonschema লাইব্রেরি সংস্করণ 4.0 থেকে 2020-12 পর্যন্ত সমর্থন করে।

বৈশিষ্ট্যDraft 7Draft 2019-09Draft 2020-12
$schema URIdraft-07/schema#2019-09/schema2020-12/schema
if / then / elseYesYesYes
$defs (definitions)definitions$defs$defs
$ref alongside keysNo (sibling ignored)YesYes
$dynamicRefNoNo ($recursiveRef)Yes
prefixItemsNo (use items array)No (use items array)Yes
unevaluatedPropertiesNoYesYes
$vocabularyNoYesYes

কোড উদাহরণ

এই উদাহরণগুলো দেখায় কিভাবে প্রোগ্রামেটিক্যালি একটি স্কিমার বিপরীতে JSON যাচাই করতে হয়। প্রতিটি তার ভাষার ইকোসিস্টেমের জন্য একটি জনপ্রিয় লাইব্রেরি ব্যবহার করে।

JavaScript (Ajv)
import Ajv from 'ajv';

const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string', minLength: 1 },
    age: { type: 'integer', minimum: 0 },
    email: { type: 'string', format: 'email' }
  },
  required: ['name', 'email'],
  additionalProperties: false
};

const data = { name: 'Alice', age: 30, email: 'alice@example.com' };

const validate = ajv.compile(schema);
const valid = validate(data);
console.log(valid);          // → true
console.log(validate.errors); // → null

// Invalid data — missing required "email"
validate({ name: 'Bob', age: 25 });
console.log(validate.errors);
// → [{ instancePath: '', keyword: 'required', params: { missingProperty: 'email' } }]
Python (jsonschema)
from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "minLength": 1},
        "age": {"type": "integer", "minimum": 0},
        "tags": {
            "type": "array",
            "items": {"type": "string"},
            "uniqueItems": True
        }
    },
    "required": ["name"]
}

# Valid data
validate(instance={"name": "Alice", "age": 30, "tags": ["admin"]}, schema=schema)
# → No exception raised

# Invalid data — wrong type for "age"
try:
    validate(instance={"name": "Alice", "age": "thirty"}, schema=schema)
except ValidationError as e:
    print(e.message)
    # → 'thirty' is not of type 'integer'
    print(e.json_path)
    # → $.age
Go (santhosh-tekuri/jsonschema)
package main

import (
    "fmt"
    "strings"
    "github.com/santhosh-tekuri/jsonschema/v5"
)

func main() {
    schemaJSON := `{
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "status": { "enum": ["active", "inactive"] }
        },
        "required": ["id", "status"]
    }`

    compiler := jsonschema.NewCompiler()
    compiler.AddResource("schema.json", strings.NewReader(schemaJSON))
    schema, _ := compiler.Compile("schema.json")

    // Valid data
    data := map[string]interface{}{"id": 1, "status": "active"}
    err := schema.Validate(data)
    fmt.Println(err) // → <nil>

    // Invalid — missing "status"
    bad := map[string]interface{}{"id": 2}
    err = schema.Validate(bad)
    fmt.Println(err) // → validation failed: missing properties: 'status'
}
CLI (check-jsonschema)
# Install via pip
pip install check-jsonschema

# Validate a file against a schema
check-jsonschema --schemafile schema.json data.json
# → ok -- validation done

# Validate against a remote schema (e.g., GitHub Actions workflow)
check-jsonschema --builtin-schema vendor.github-workflows my-workflow.yml

# Validate multiple files at once
check-jsonschema --schemafile schema.json file1.json file2.json file3.json

প্রায়শই জিজ্ঞাসিত প্রশ্ন

JSON ভ্যালিডেশন এবং JSON Schema ভ্যালিডেশনের মধ্যে পার্থক্য কী?
JSON ভ্যালিডেশন যাচাই করে একটি স্ট্রিং বৈধ JSON সিনট্যাক্স কিনা: যথাযথভাবে নেস্টেড বন্ধনী, কোটেড কী, কোনো trailing comma নেই। JSON Schema ভ্যালিডেশন আরো একটি ধাপ এগিয়ে পার্স করা JSON ডেটা একটি কাঠামোগত চুক্তির সাথে মিলছে কিনা যাচাই করে: সঠিক ধরন, আবশ্যিক ফিল্ড উপস্থিত, মান অনুমোদিত পরিসরের মধ্যে। Schema প্রয়োগ করার আগে বৈধ JSON প্রয়োজন, কিন্তু বৈধ JSON এখনও Schema ভ্যালিডেশনে ব্যর্থ হতে পারে।
কোন JSON Schema Draft ব্যবহার করা উচিত?
Draft 7 সবচেয়ে নিরাপদ ডিফল্ট। এটি ভাষাজুড়ে সবচেয়ে বিস্তৃত লাইব্রেরি সমর্থন পেয়েছে এবং বেশিরভাগ প্রকল্পের প্রয়োজনীয় কীওয়ার্ডগুলো কভার করে: type, properties, required, enum, pattern, anyOf, oneOf, allOf এবং $ref। Draft 2020-12 ব্যবহার করুন যদি আপনার tuple ভ্যালিডেশনের জন্য prefixItems, বিস্তারযোগ্য স্কিমার জন্য $dynamicRef, বা কঠোর অবজেক্ট আকারের জন্য unevaluatedProperties-এর মতো বৈশিষ্ট্য প্রয়োজন হয়। আপগ্রেড করার আগে Draft সমর্থন নিশ্চিত করতে আপনার ভ্যালিডেটর লাইব্রেরির ডকুমেন্টেশন দেখুন।
JSON Schema-তে $ref কিভাবে কাজ করে?
$ref কীওয়ার্ড আপনাকে URI দ্বারা অন্য একটি স্কিমা রেফারেন্স করতে দেয় — সেটি নকল না করে। "$ref": "#/$defs/address"-এর মতো একটি মান একই ডকুমেন্টের $defs বিভাগে সংজ্ঞায়িত স্কিমা নির্দেশ করে। আপনি "$ref": "https://example.com/schemas/address.json" দিয়ে বাহ্যিক ফাইলও রেফারেন্স করতে পারেন। Draft 7-এ, $ref একই অবজেক্টের সমস্ত সহ-কীওয়ার্ড প্রতিস্থাপন করে। Draft 2019-09 এবং পরবর্তীতে, সহ-কীওয়ার্ডগুলো $ref-এর পাশাপাশি প্রয়োগ হয়।
anyOf, oneOf এবং allOf-এর মধ্যে পার্থক্য কী?
allOf প্রয়োজন করে যে ডেটা সব সাব-স্কিমার সাথে মিলবে। anyOf অন্তত একটি সাব-স্কিমার সাথে মিল প্রয়োজন করে। oneOf ঠিক একটি সাব-স্কিমার সাথে মিল প্রয়োজন করে এবং ডেটা শূন্য বা একাধিকের সাথে মিললে ব্যর্থ হয়। nullable ফিল্ডের জন্য, type এবং null সহ anyOf সাধারণত ব্যবহৃত হয়: {"anyOf": [{"type": "string"}, {"type": "null"}]}। সাব-স্কিমাগুলো পরস্পর একচেটিয়া হলে oneOf ব্যবহার করুন, যেমন tagged union।
JSON Schema কি নেস্টেড অবজেক্ট এবং অ্যারে যাচাই করতে পারে?
হ্যাঁ। নেস্টেড অবজেক্ট কী-এর জন্য স্কিমা সংজ্ঞায়িত করতে properties কীওয়ার্ড ব্যবহার করুন, এবং প্রতিটি অ্যারে উপাদান যে স্কিমার সাথে মিলতে হবে তা সংজ্ঞায়িত করতে items কীওয়ার্ড ব্যবহার করুন। যেকোনো গভীরতায় এগুলো নেস্ট করা যায়। এমন অ্যারেতে যেখানে প্রতিটি অবস্থানে আলাদা স্কিমা আছে (tuple), Draft 2020-12-এ prefixItems বা Draft 7-এ items-এর অ্যারে ফর্ম ব্যবহার করুন।
এই টুলে পেস্ট করা ডেটা কি সার্ভারে পাঠানো হয়?
না। ভ্যালিডেটর সম্পূর্ণ আপনার ব্রাউজারে JavaScript ব্যবহার করে চলে। আপনার JSON ডেটা এবং স্কিমা কোনো সার্ভারে পাঠানো হয় না। টুলটি ব্যবহারের সময় আপনার ব্রাউজারের নেটওয়ার্ক ইন্সপেক্টর খুলে এটি যাচাই করতে পারেন।
CI/CD পাইপলাইনে JSON Schema কিভাবে যাচাই করবেন?
check-jsonschema (Python/pip) বা ajv-cli (Node.js/npm)-এর মতো CLI ভ্যালিডেটর ব্যবহার করুন। উভয়ই একটি স্কিমা ফাইল এবং এক বা একাধিক ডেটা ফাইল আর্গুমেন্ট হিসেবে গ্রহণ করে। আপনার CI কনফিগে একটি ধাপ হিসেবে ভ্যালিডেশন কমান্ড যুক্ত করুন। ভ্যালিডেশন ব্যর্থ হলে প্রক্রিয়াটি নন-জিরো এক্সিট কোড দিয়ে বের হয়, যা পাইপলাইন আটকে দেয়। GitHub Actions-এর জন্য, আপনি সরাসরি check-jsonschema অ্যাকশনও ব্যবহার করতে পারেন।