JSONPath নাকি JSON Pointer
সংক্ষেপে: JSON Pointer হলো কি হিসেবে রাখা যায় এমন অনন্য ঠিকানা; JSONPath একটি কোয়েরি ভাষা। ভুলটি ব্যবহারে কনফিগ হালনাগাদ ভাঙে বা ভাঙা JSONPath নতুন করে বানাতে হয়।

মূল কথা: একটি নোডের ঠিকানা পড়তে, লিখতে বা সংরক্ষণ করতে হলে JSON Pointer (যেমন /server/cors/0), আর শর্ত দিয়ে নোডের সেট বাছাইতে JSONPath; সংরক্ষিত যেকোনো পাথ Pointer হবে, কখনো এক্সপ্রেশন নয়।
জিজ্ঞাসা করুন আপনার এক নোড দরকার নাকি সেট।
এক টেবিলে
| JSON Pointer | JSONPath | |
|---|---|---|
| প্রকৃতি | অনন্য ঠিকানা | কোয়েরি এক্সপ্রেশন |
| সিনট্যাক্স | /a/b/0 |
$.a.b[0], $..price |
| ফল | ঠিক একটি নোড, বা কিছুই নয় | শূন্য বা তার বেশি নোড |
| কি হিসেবে সংরক্ষণযোগ্য | হ্যাঁ, স্ট্রিংটাই পরিচয় | না, অনেকগুলো মিলতে পারে |
| স্ট্যান্ডার্ড | RFC 6901 | RFC 9535 (২০২৪-এ চূড়ান্ত) |
JSON Pointer
/server/host -> "127.0.0.1"
/server/cors/0 -> "https://a.com"
/ -> the whole document
/ বা ~ ধারণকারী কি এস্কেপ হয়: ~-এর জন্য ~0, /-এর জন্য ~1। মূল্য নির্ধারকতা: ঠিকানা একটি স্ট্রিং, তাই ডেটাবেস কলাম, লগ লাইন বা কনফিগ কি-তে যায়। JSON Patch (RFC 6902) প্রতিটি অপারেশন এভাবেই সম্বোধন করে।
JSONPath
$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]
SQL WHERE-এর কাছাকাছি। একই এক্সপ্রেশন ডেটার উপর নির্ভর করে শূন্য, এক বা একশো নোড ফেরত দেয়।
দুই ব্যর্থতার ধরন
JSONPath-কে কনফিগ কি হিসেবে ব্যবহার। $.server.port সংরক্ষণ করুন আর একদিন কাঠামো অ্যারে হয়ে যায়; এক্সপ্রেশন তখন কয়েকটি port মেলে আর আপডেট লজিকের বাছার উপায় থাকে না।
বাছাইয়ে Pointer ব্যবহার। "দাম ১০-এর নিচে এমন প্রতিটি নোড খোঁজো" পয়েন্টার দিয়ে অসম্ভব। নিজে লুপ লিখলে আংশিক JSONPath বানাতে হয়।
বাস্তব সিস্টেম কীভাবে কাজ ভাগ করে
- কনফিগ পড়া, ফিল্ড হালনাগাদ, প্যাচ: Pointer, স্থির ও অডিটযোগ্য
- ডেটা অন্বেষণ, বাল্ক এক্সট্রাকশন, রিপোর্টিং: JSONPath, প্রকাশক্ষমতা প্রথমে
- সংরক্ষিত যেকোনো কিছু: কেবল Pointer, কখনো এক্সপ্রেশন নয়
সাধারণ প্রশ্ন
JSON Pointer ও JSONPath-এর মধ্যে কীভাবে বাছাই করব?
আপনার এক নোড দরকার নাকি সেট — জিজ্ঞাসা করুন। একটি নির্দিষ্ট নোড পড়তে/লিখতে ও সেই ঠিকানা কি হিসেবে রাখতে JSON Pointer ব্যবহার করুন, কারণ পয়েন্টার অনন্য, যেমন /server/cors/0। শর্ত দিয়ে নোড বাছাইতে JSONPath, যেমন $.store.book[?(@.price < 10)]।
JSONPath এক্সপ্রেশন কনফিগ কি হিসেবে ব্যবহার করা যায় না কেন?
কারণ এক্সপ্রেশন কয়েকটি নোড মিলতে পারে। $.server.port সংরক্ষণ করুন আর একদিন কাঠামো অ্যারে হয়ে যায়; এক্সপ্রেশন তখন কয়েকটি port মেলে আর আপডেট লজিক ঠিক করতে পারে না কোনটি বদলাবে। সংরক্ষিত বা অডিটযোগ্য যেকোনো কিছুতে Pointer দরকার।
JSON Pointer কি শর্ত দিয়ে নোড ফিল্টার করতে পারে?
না। পয়েন্টার কেবল নির্দিষ্ট পাথ হাঁটে আর কোন নোড আছে জানার উপায় নেই, তাই দাম ১০-এর নিচে এমন প্রতিটি নোড বাছাই অসম্ভব। সেই লুপ নিজে লিখলে আংশিক JSONPath বানাতে হয়।