JSONPath কি?

JSONPath হল JSON এর জন্য একটি কোয়েরি ভাষা, যা XML এর জন্য XPath কীভাবে কাজ করে তার মতো। এটি আপনাকে পাথ এক্সপ্রেশন ব্যবহার করে JSON স্ট্রাকচার থেকে ডেটা নেভিগেট এবং এক্সট্র্যাক্ট করতে দেয়। একটি JSONPath এক্সপ্রেশন $ দিয়ে শুরু হয়, যা ডকুমেন্টের রুট প্রতিনিধিত্ব করে, এবং ডট নোটেশন (.key) বা ব্র্যাকেট নোটেশন (['key']) ব্যবহার করে অবজেক্ট ট্রাভার্স করে, এবং [index] ব্যবহার করে অ্যারে এলিমেন্ট অ্যাক্সেস করে।

JSONPath মূলত Stefan Gössner দ্বারা 2007 সালে বর্ণিত হয়েছিল এবং তখন থেকেই এটি API, টেস্টিং ফ্রেমওয়ার্ক এবং ডেটা প্রসেসিং পাইপলাইনে একটি ব্যাপকভাবে ব্যবহৃত স্ট্যান্ডার্ড হয়ে উঠেছে। এটি JavaScript, Python, Java সহ অনেক ভাষা এবং টুলে সমর্থিত, এবং PostgreSQL এবং MySQL এর মতো ডাটাবেসেও।

টুল বর্ণনা

এই টুলটি আপনাকে যেকোনো বৈধ JSON ডকুমেন্ট পেস্ট করতে এবং এটি কোয়েরি করার জন্য একটি JSONPath এক্সপ্রেশন লিখতে দেয়। ফলাফলগুলি আপনি টাইপ করার সাথে সাথে তাৎক্ষণিকভাবে প্রদর্শিত হয়, সমস্ত ম্যাচিং মানগুলি একটি ফরম্যাটেড JSON অ্যারে হিসাবে দেখায়। ম্যাচ কাউন্ট আলাদাভাবে দেখানো হয় যাতে আপনি দ্রুত যাচাই করতে পারেন কতগুলি নোড নির্বাচিত হয়েছে।

উদাহরণ

ইনপুট JSON:

{
  "store": {
    "book": [
      { "title": "Moby Dick", "price": 8.99, "category": "fiction" },
      { "title": "War and Peace", "price": 12.5, "category": "fiction" },
      {
        "title": "A Brief History of Time",
        "price": 7.99,
        "category": "science"
      }
    ]
  }
}
এক্সপ্রেশন ফলাফল
$.store.book[*].title সমস্ত বই শিরোনাম
$.store.book[0] প্রথম বই অবজেক্ট
$.store.book[?(@.price < 10)] $10 এর চেয়ে সস্তা বই
$.store.book[?(@.category == "fiction")] শুধুমাত্র ফিকশন বই
$..price ডকুমেন্টের যেকোনো জায়গায় সমস্ত মূল্য মান

বৈশিষ্ট্য

  • রিয়েল-টাইম মূল্যায়ন — এক্সপ্রেশন টাইপ করার বা JSON সম্পাদনা করার সাথে সাথে ফলাফল আপডেট হয়
  • একটি ডেডিকেটেড ফিল্ডে ম্যাচ কাউন্ট প্রদর্শন করে
  • এক্সপ্রেশন ফিল্ডে কপি বাটন দ্রুত পুনঃব্যবহারের জন্য
  • ক্লিপবোর্ড থেকে দ্রুত JSON বা এক্সপ্রেশন সন্নিবেশ করানোর জন্য পেস্ট বাটন
  • অবৈধ JSON বা ত্রুটিপূর্ণ পাথ এক্সপ্রেশনের জন্য ত্রুটি রিপোর্টিং

এটি কীভাবে কাজ করে

JSONPath এক্সপ্রেশনগুলি jsonpath-plus লাইব্রেরি ব্যবহার করে পার্স করা JSON এর বিপরীতে মূল্যায়ন করা হয়। $ প্রতীক রুট এলিমেন্ট নির্দেশ করে। চাইল্ড নোডগুলি . বা [] দিয়ে অ্যাক্সেস করা হয়, ওয়াইল্ডকার্ড * দিয়ে, রিকার্সিভ ডিসেন্ট .. দিয়ে, এবং ফিল্টার [?(...)] দিয়ে। ফলাফল সর্বদা ম্যাচিং মানগুলির একটি অ্যারে, এমনকি যদি শুধুমাত্র একটি ম্যাচ পাওয়া যায়।

অপশন ব্যাখ্যা করা

সিনট্যাক্স অর্থ
$ রুট এলিমেন্ট
.key বা ['key'] চাইল্ড প্রপার্টি
[*] সমস্ত অ্যারে এলিমেন্ট
[0] প্রথম অ্যারে এলিমেন্ট (জিরো-ইন্ডেক্সড)
[-1] শেষ অ্যারে এলিমেন্ট
[0,2] ইন্ডেক্স 0 এবং 2 এ এলিমেন্ট
[0:2] ইন্ডেক্স 0 থেকে 1 পর্যন্ত এলিমেন্ট (স্লাইস)
..key রিকার্সিভ ডিসেন্ট — যেকোনো গভীরতায় key খুঁজুন
[?(@.price > 5)] ফিল্টার — এলিমেন্ট যেখানে price 5 এর চেয়ে বেশি
@ বর্তমান নোড (ফিল্টার এক্সপ্রেশনের মধ্যে ব্যবহৃত)

ব্যবহারের ক্ষেত্র

  • API ডেভেলপমেন্ট — যাচাই করুন যে একটি REST ক্লায়েন্ট, টেস্ট স্যুট বা ডেটা ম্যাপিং টুলে ব্যবহৃত একটি JSONPath সিলেক্টর একটি API রেসপন্স থেকে প্রত্যাশিত ফিল্ডগুলি এক্সট্র্যাক্ট করে
  • ডেটা ট্রান্সফরমেশন — একটি ট্রান্সফরমেশন স্ক্রিপ্ট লেখার আগে নেস্টেড JSON পেলোড থেকে কোন মানগুলি এক্সট্র্যাক্ট করতে হবে তা চিহ্নিত করুন
  • JSONPath শেখা — পাথ সিনট্যাক্স ইন্টারঅ্যাক্টিভভাবে পরীক্ষা করুন যাতে বুঝতে পারেন কীভাবে .., [*] এবং [?()] এর মতো অপারেটরগুলি বাস্তব ডেটায় আচরণ করে

টিপস

  • সম্পূর্ণ ডকুমেন্টের প্রতিটি একক মান পেতে $..* ব্যবহার করুন — অজানা JSON স্ট্রাকচার অন্বেষণের জন্য দরকারী।
  • ফিল্টার এক্সপ্রেশনগুলি তুলনা (==, !=, <, >, <=, >=) সমর্থন করে এবং নেস্টেড প্রপার্টি রেফার করতে পারে: [?(@.author.name == "Rees")]
  • এর গভীরতা নির্বিশেষে একটি প্রপার্টি ম্যাচ করতে, .. রিকার্সিভ ডিসেন্ট ব্যবহার করুন: $..title ডকুমেন্টের যেকোনো জায়গায় সমস্ত title ফিল্ড খুঁজে পায়।