JSON Schema যাচাইকারী
JSONJSON Schema (Draft-07 / 2019-09 / 2020-12)-এর বিপরীতে JSON যাচাই করুন (প্রতি-ক্ষেত্র লঙ্ঘনসহ), অথবা নমুনা থেকে একটি স্কিমা অনুমান করুন।
দূরবর্তী URL আনা হয় না; আপনার JSON সরাসরি পেস্ট করুন।
এই পৃষ্ঠায়
JSON Schema টুল কী?#
একটি JSON মান একাই আপনাকে বলে ডেটা কী — এখানে একটি স্ট্রিং, ওখানে একটি সংখ্যা। এটি আপনাকে বলে না ডেটা কী হওয়া উচিত: age অবশ্যই একটি অ-ঋণাত্মক পূর্ণসংখ্যা হতে হবে কি না, email আবশ্যক কি না, tags খালি হতে দেওয়া হবে কি না। JSON Schema হলো এই জিনিসগুলো বলার শব্দভাণ্ডার। আপনি একটি স্কিমা লেখেন — একটি ছোট JSON নথি যা একটি আকার বর্ণনা করে — এবং একটি যাচাইকারী পরীক্ষা করে একটি ডেটা টুকরো সেই আকারে মানায় কি না, ফিল্ডে ফিল্ডে।
এই পৃষ্ঠাটি একটি স্কিমা ইঞ্জিন দিয়ে দুটি কাজ করে। যাচাই একটি স্কিমা এবং একটি ডেটা নথি নেয় এবং আপনাকে সুনির্দিষ্টভাবে বলে কোন ফিল্ডগুলো কোন নিয়ম লঙ্ঘন করেছে, প্রতিটি তার নথির পথে আটকানো। অনুমান অন্য দিকে যায়: এটিকে একটি নমুনা JSON মান দিন এবং এটি কাঠামো অতিক্রম করে এবং প্রতিটি ফিল্ডের প্রকার রেকর্ড করে আপনার জন্য একটি Draft-07-স্টাইলের স্কিমা লেখে। দুটি স্বাভাবিকভাবেই একত্রিত হয় — একটি প্রতিনিধিত্বমূলক নমুনা থেকে একটি স্কিমা অনুমান করুন, তারপর প্রতিটি ভবিষ্যৎ নথি তার বিরুদ্ধে যাচাই করুন।
যাচাইকরণ একই Ajv ইঞ্জিনে চলে যা প্রোডাকশন কোড ব্যবহার করে, তিনটি ড্রাফট নির্বাচনযোগ্য (Draft-07, 2019-09, 2020-12) এবং স্ট্রিক্ট-মোড গার্ড শিথিল করা হয়েছে, তাই একটি সামান্য অ-স্ট্রিক্ট স্কিমা সরাসরি প্রত্যাখ্যানের বদলে সহ্য করা হয়।
ব্যবহারবিধি#
- টুলবার টগল থেকে একটি মোড বেছে নিন:
- যাচাই (ডিফল্ট): বাঁদিকে আপনার স্কিমা, ডানদিকে আপনার ডেটা পেস্ট করুন।
- অনুমান: বাঁদিকে একটি নমুনা JSON মান পেস্ট করুন, ডানদিকে তৈরি করা স্কিমা পড়ুন।
- যাচাই মোডে, Draft বেছে নিন যার বিরুদ্ধে স্কিমা লেখা হয়েছে — Draft-07 বাস্তবে থাকা স্কিমাগুলোর বিশাল সংখ্যাগরিষ্ঠতা কভার করে; শুধুমাত্র তখনই 2019-09 বা 2020-12 বেছে নিন যখন আপনার স্কিমা সেই ড্রাফটগুলোর পরিচয় করানো বৈশিষ্ট্য ব্যবহার করে।
- আউটপুটের জন্য একটি ইনডেন্ট বেছে নিন — 2 বা 4 স্পেস। অনুমান মোডে এটি তৈরি করা স্কিমার ফরম্যাটিং নিয়ন্ত্রণ করে।
- ডান পেইন হয় ডেটা নথি (যাচাই) বা অনুমান করা স্কিমা (অনুমান) দেখায়। পেইন লেবেলগুলো মোডের সাথে মিলিয়ে বদলায়।
- যাচাই মোডে, পেইনগুলোর নিচের লঙ্ঘন প্যানেল প্রতিটি লঙ্ঘনকে
পথ — কারণহিসেবে তালিকাভুক্ত করে। নথির রুটকে(root)হিসেবে দেখানো হয়; একটি নেস্টেড ফিল্ড তার JSON পয়েন্টার হিসেবে উপস্থিত হয়, যেমন/age। - অনুমান করা স্কিমা বা ডেটা নিতে ডান পেইনে কপি ক্লিক করুন, অথবা লোড বা রিসেট করতে নমুনা / মুছুন।
উভয় ইনপুট পার্স হওয়ার সাথে সাথেই ফলাফল গণনা হয়। একটি স্কিমা বা ডেটা সিনট্যাক্স ত্রুটি তার সুনির্দিষ্ট সারি ও কলাম সহ রিপোর্ট করা হয়, স্কিমা, ডেটা বা কম্পাইল সমস্যা হিসেবে ট্যাগ করা হয় যাতে আপনি জানেন কোথায় তাকাতে হবে।
মূল বৈশিষ্ট্য#
- দুটি মোড, একটি ইঞ্জিন। নথি যাচাই করুন, অথবা একটি নমুনা থেকে একটি স্কিমা তৈরি করুন, নিচে একই বিশ্বস্ত যাচাইকারী সহ।
- তিনটি ড্রাফট। Draft-07, 2019-09, এবং 2020-12 প্রত্যেকটি শুধুমাত্র তাদের নিজস্ব কম্পাইল করা যাচাইকারী লোড করে, তাই আপনি সর্বদা আপনি আসলে যে ড্রাফট টার্গেট করেন তার বিরুদ্ধে যাচাই করছেন।
- সব ত্রুটি, শুধু প্রথমটি নয়। প্রতিটি লঙ্ঘন সংগ্রহ করা হয়, তাই পাঁচটি সমস্যার সাথে একটি নথি পাঁচটি সমস্যা দেখায়, পাঁচটি রাউন্ড ট্রিপ বাধ্য করার বদলে।
- পথ-আটকানো লঙ্ঘন। প্রতিটি লঙ্ঘন নথিতে তার অবস্থান নির্দেশ করে — সম্পূর্ণ-নথি সমস্যার জন্য
(root), বা/user/address/zip-এর মতো একটি সুনির্দিষ্ট পয়েন্টার। - স্ট্রিক্ট মোড শিথিল। একটি অজানা কীওয়ার্ড বা একটি অনুপস্থিত শীর্ষ-স্তরের প্রকার সহ একটি স্কিমা সহ্য করা হয় এবং চালানো হয়, কম্পাইলের সময় প্রত্যাখ্যান করা হয় না — এমন একটি টুলের জন্য সঠিক আচরণ যার কাজ পরীক্ষা করা, উপদেশ দেওয়া নয়।
- শুধু স্থানীয়। স্কিমা ও ডেটা আপনার ব্রাউজারে প্রক্রিয়া করা হয়। কিছুই আপলোড হয় না।
ব্যবহারিক উদাহরণ#
একটি user অবজেক্টর অবশ্যই একটি name থাকতে হবে, এবং age অবশ্যই একটি অ-ঋণাত্মক পূর্ণসংখ্যা হতে হবে। যাচাই মোডে বাঁদিকে এই স্কিমাটি পেস্ট করুন:
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name"]
}
এখন একটি নথি পরীক্ষা করুন যা উভয় নিয়ম ভাঙে — name অনুপস্থিত, এবং একটি ঋণাত্মক age:
{
"age": -3
}
লঙ্ঘন প্যানেল দুটি লঙ্ঘন রিপোর্ট করে, প্রতিটি যেখানে ঘটেছে সেখানে আটকানো:
(root) — must have required property 'name'
/age — must be >= 0
(root) পথটি আপনাকে বলে অনুপস্থিত আবশ্যক প্রোপার্টিটি একটি নথি-স্তরের সমস্যা; /age সরাসরি ত্রুটিপূর্ণ ফিল্ডে নির্দেশ করে। ডেটাকে {"name":"ada","age":36}-এ ঠিক করুন এবং স্ট্যাটাস একটি খালি লঙ্ঘন তালিকা সহ বৈধতে ফ্লিপ করে। কারণ টেক্সটটি Ajv-এর নিজস্ব কীওয়ার্ড শব্দবন্ধ, আক্ষরিকভাবে রাখা হয়েছে যাতে তা মেলে যা আপনার প্রোডাকশন লগ বলবে।
প্রশ্নোত্তর#
Draft-07, 2019-09, নাকি 2020-12 — কোনটি বেছে নেব?#
Draft-07 হলো ব্যবহারিক ডিফল্ট: টিউটোরিয়াল, লাইব্রেরি এবং OpenAPI স্পেকগুলোর সিংহভাগ স্কিমা এটিকে টার্গেট করে, এবং আপনার সম্ভবত যা যা প্রয়োজন (type, properties, required, minimum, format, $ref) তা এখানে কাজ করে। শুধুমাত্র তখনই 2019-09 বা 2020-12-এ যান যখন আপনার স্কিমা স্পষ্টভাবে সেই ড্রাফটগুলোর যোগ করা বৈশিষ্ট্য ব্যবহার করে — যেমন unevaluatedProperties বা সংশোধিত $ref আচরণ। ভুল ড্রাফট বেছে নিলেও সাধারণত কাজ চলে, কিন্তু নিরাপদ পছন্দ হলো স্কিমা লেখকের উদ্দেশ্য করা ড্রাফট।
লঙ্ঘন বার্তাগুলো কেন ইংরেজিতে?#
এগুলো Ajv-এর নিজস্ব কারণ টেক্সট প্রতিটি কীওয়ার্ডের জন্য (must have required property, must be >= 0, ইত্যাদি), অপরিবর্তিতভাবে পাস করা হয়েছে। মূল বিষয় হলো সামঞ্জস্য: এগুলো সেই সঠিক স্ট্রিং যা আপনার সার্ভার-সাইড যাচাইকরণ লগ করবে, তাই সেগুলো এখানে মিলিয়ে প্রোডাকশনে একটি অমিলকে গ্রেপ-যোগ্য করে তোলে।
“স্ট্রিক্ট মোড শিথিল” দ্বারা কী বোঝায়?#
Ajv-এর স্ট্রিক্ট মোড এমন স্কিমাকে প্রত্যাখ্যান করে যেগুলোকে সে অবহেলাশীল মনে করে — একটি অজানা কীওয়ার্ড, একটি $ref যা সে সমাধান করতে পারে না, একটি অনুপস্থিত type। এটি একটি বিল্ড পাইপলাইনে উপযোগী কিন্তু একটি যাচাইকারী টুলের জন্য ভুল, যার কাজ আপনি যে স্কিমা তাকে দেন তার বিরুদ্ধে ডেটা পরীক্ষা করা। এই পৃষ্ঠাটি স্ট্রিক্ট মোড বন্ধ করে দেয়, তাই একটি অ-স্ট্রিক্ট স্কিমা কম্পাইল হয় এবং চলে, ত্রুটি নিক্ষেপের বদলে।
আমি কি একটি স্কিমা অনুমান করে তারপর তার বিরুদ্ধে যাচাই করতে পারি?#
হ্যাঁ — এটিই উদ্দেশ্যকৃত রাউন্ড ট্রিপ। অনুমান মোডে একটি প্রতিনিধিত্বমূলক নমুনা পেস্ট করুন, তৈরি করা স্কিমা কপি করুন, যাচাই-এ স্যুইচ করুন, এবং স্কিমাটি বাঁদিকে ফিরিয়ে পেস্ট করুন। অনুমান করা স্কিমাটি মূল নমুনাকে পরিষ্কারভাবে পুনরায় যাচাই করে, এবং তারপর থেকে আপনি প্রতিটি নতুন নথি তার বিরুদ্ধে যাচাই করতে পারেন।