টুল
গাইড

JSONPath কোয়েরি

JSON

একটি JSON নথিতে JSONPath / jq-স্টাইল ক্যোয়ারি চালান এবং প্রতিটি মিল হাইলাইট করুন।

100% ক্লায়েন্ট-সাইড কোনো ব্যাকএন্ড নেই

দূরবর্তী URL আনা হয় না; আপনার JSON সরাসরি পেস্ট করুন।

ইনপুট
মিল
JSON মিল হওয়া মানগুলি হাইলাইট করা হয়েছে
মিলগুলি মূল্যায়ন করতে JSON এবং একটি JSONPath এক্সপ্রেশন পেস্ট করুন।
এই পৃষ্ঠায়

JSONPath টেস্টার কী?#

যখন একটি JSON নথি ছোট হয়, আপনি চোখ দিয়ে তা পড়েন। যখন এটি কয়েক হাজার সারির — একটি API প্রতিক্রিয়া, একটি কনফিগ ডাম্প, একটি ডিপেন্ডেন্সি ট্রি — তখন আপনার চোখ আর সঠিক টুল থাকে না। JSONPath হলো সেই পরিস্থিতির জন্য কোয়েরি ভাষা: একটি সংক্ষিপ্ত এক্সপ্রেশন যা বলে “আমাকে প্রতিটি price ফিল্ড দাও”, বা “10-এর সস্তা বইগুলোর শিরোনাম”, বা “isbn নামের প্রতিটি নোড যে কতটা গভীরে লুকানো থাকুক না কেন”।

এটিকে একটি ফাইল পাথ এবং একটি ক্ষুদ্র ফিল্টার ভাষার সংকর হিসেবে ভাবুন। $.store.book[0].title একটি পরিচিত কাঠামোর নিচে নামে ঠিক যেমন একটি ফাইলসিস্টেম পাথ নামে। $..author বলে “রিকার্সিভভাবে নেমে আসুন এবং আপনি যা যা author খুঁজে পাবেন তা সংগ্রহ করুন”। [?(@.price < 10)] হলো একটি ফিল্টার: শুধু সেই উপাদানগুলো রাখুন যেখানে বর্তমান নোডের price দশ-এর নিচে। @ সবসময় বোঝায় “নোডটি যা আমি এই মুহূর্তে দেখছি”।

এই পৃষ্ঠাটি আপনার JSON-এর বিরুদ্ধে একটি JSONPath এক্সপ্রেশন চালায়, প্রতিটি মিল তালিকাভুক্ত করে, এবং — যে অংশটি সবচেয়ে বেশি সময় বাঁচায় — ফরম্যাট করা নথিতে মিলে যাওয়া পরিসরগুলো সরাসরি হাইলাইট করে যাতে আপনি এক নজরে দেখতে পারেন আপনার এক্সপ্রেশন যা আপনি ভাবছেন তা নির্বাচন করেছে কি না। ফিল্টারগুলো একটি নিরাপদ এক্সপ্রেশন পার্সার দিয়ে মূল্যায়ন করা হয়, কোনো কোড সম্পাদন করে নয়, তাই একটি অবিশ্বস্ত দলা কিছুই চালাতে পারে না।

ব্যবহারবিধি#

  1. বাঁদিকের ইনপুট পেইনে আপনার JSON পেস্ট করুন, অথবা ক্লাসিক বুকস্টোর ফিক্সচার লোড করতে নমুনা ক্লিক করুন।
  2. ডানদিকের JSONPath ফিল্ডে একটি JSONPath এক্সপ্রেশন টাইপ করুন। সাধারণ শুরুর পয়েন্ট:
    • $.store.book[*].author — প্রতিটি অ্যারে উপাদানের author
    • $..author — রিকার্সিভ ডিসেন্ট: প্রতিটি author, যেকোনো জায়গায়।
    • $.store.book[?(@.price < 10)].title — একটি ফিল্টার এক্সপ্রেশন।
    • $.store.book[?(@.isbn)].isbn — একটি অস্তিত্ব পরীক্ষা (isbn কী আছে কি না)।
  3. ফিল্ডের নিচের মিল তালিকা প্রতিটি ফলাফলের জন্য একটি এন্ট্রি দিয়ে পূর্ণ হয়, এবং নিচের পুরো-প্রস্থ JSON প্রিভিউ প্রতিটি মিল পরিসর স্থানে হাইলাইট করে।
  4. মিল-এর পাশের হেডার গণনা দেখায়। একটি এক্সপ্রেশন যা শূন্য নোড মেলে তবুও সাফল্য রিপোর্ট করে (খালি তালিকা) — শুধুমাত্র একটি সিনট্যাক্টিকভাবে ভাঙা এক্সপ্রেশন একটি ত্রুটি দেখায়।
  5. মিলে যাওয়া মানগুলো একটি JSON অ্যারে হিসেবে নিতে টুলবারে মিলগুলি কপি করুন ক্লিক করুন, অথবা উভয় পেইন রিসেট করতে মুছুন

আপনি টাইপ করার সাথে সাথে কোয়েরি চলে। JSON নিজেই অবৈধ হলে, স্ট্যাটাস বার ঠিক করার জন্য সুনির্দিষ্ট সারি ও কলাম নির্দেশ করে।

মূল বৈশিষ্ট্য#

  • স্থানে হাইলাইটিং। প্রতিটি মিল ফরম্যাট করা নথির উপর ওভারলে করা হয়, তাই ত্রিশটি নোড ধরে আনা একটি রিকার্সিভ $.. তালিকায় পুঁতে থাকার বদলে সঙ্গে সঙ্গে দৃশ্যমান হয়।
  • নিরাপদ ফিল্টার মূল্যায়ন। [?(@.price < 10)]-এর মতো এক্সপ্রেশন একটি এক্সপ্রেশন মূল্যায়ক দিয়ে পার্স করে, ডায়নামিক কোড সম্পাদনে হস্তান্তর করা হয় না — শত্রু ইনপুটেও পৃষ্ঠাটি CSP-নিরাপদ থাকে।
  • স্বতন্ত্র “কোনো মিল নেই” বনাম “ত্রুটি”। একটি বৈধ এক্সপ্রেশন যা কিছুই নির্বাচন করে না তা শূন্য মিল হিসেবে রিপোর্ট করা হয়; শুধুমাত্র একটি ত্রুটিপূর্ণ এক্সপ্রেশনকে ত্রুটি হিসেবে চিহ্নিত করা হয়। আপনি কখনো “কিছু পাওয়া যায়নি” কে “ভাঙা” এর সাথে গুলিয়ে ফেলবেন না।
  • প্রতি-মিল পয়েন্টার। প্রতিটি ফলাফল তার JSON পয়েন্টার বহন করে (যেমন /store/book/2/title), তাই আপনি ঠিক জানেন ট্রিতে একটি মান কোথা থেকে এসেছে।
  • অ্যারে হিসেবে কপি। মিলে যাওয়া মানগুলো একটি পরিষ্কার JSON অ্যারে হিসেবে রপ্তানি হয়, পরবর্তী ধাপে পাইপ করার জন্য প্রস্তুত।
  • শুধু স্থানীয়। আপনার ডেটা ব্রাউজারে কোয়েরি করা হয়। কোনো ব্যাকএন্ড বা আপলোড নেই।

ব্যবহারিক উদাহরণ#

নমুনা লোড করুন, তারপর একটি ফিল্টার চালান যা সস্তা বইগুলোর শিরোনাম খুঁজে বের করে। JSONPath ফিল্ডে এটি লিখুন:

$.store.book[?(@.price < 10)].title

মিল তালিকা দুটি শিরোনাম ফেরত দেয়, কারণ ফিক্সচারের চারটি বইয়ের মধ্যে মাত্র দুটির দাম 10-এর নিচে:

[
  "Sayings of the Century",
  "Moby Dick"
]

JSON প্রিভিউ সেই দুটি title মান স্থানে হাইলাইট করে, এবং আপনি দেখতে পান কেন অন্য দুটি বাদ দেওয়া হয়েছে — Sword of Honour (12.99) এবং The Lord of the Rings (22.99) থ্রেশহোল্ডের উপরে অবস্থান করে। কোন বইগুলো ISBN বহন করে তা খুঁজতে একটি অস্তিত্ব পরীক্ষায় স্যুইচ করুন:

$.store.book[?(@.isbn)].isbn

এটি দুটি ISBN স্ট্রিং ফেরত দেয় এবং আর কিছুই না, কারণ ফিল্টার শুধুমাত্র সেই উপাদানগুলো রাখে যাদের আসলে isbn কী আছে — “কোন রেকর্ডগুলো একটি ফিল্ড থেকে বঞ্চিত” তা নেগেট করে খুঁজে বের করার একটি কার্যকর প্যাটার্ন।

প্রশ্নোত্তর#

$ এবং @-এর মধ্যে পার্থক্য কী?#

$ হলো নথির রুট — সম্পূর্ণ JSON মান আপনি পেস্ট করেছেন। @ হলো একটি ফিল্টারের ভেতরে বিবেচনাধীন বর্তমান নোড। তাই [?(@.price < 10)]-এ, @ যেই বইটিকে ফিল্টার এই মুহূর্তে পরীক্ষা করছে তাকে নির্দেশ করে; সেখানে $.price লিখলে রুটে ফিরে যেত এবং এমন একটি শীর্ষ-স্তরের price খুঁজত যা নেই।

আমার এক্সপ্রেশন কিছুই মেলে না। এটি কি একটি বাগ?#

সম্ভবত নয়। একটি বৈধ এক্সপ্রেশন যা শূন্য নোড নির্বাচন করে তা একটি খালি ফলাফল সহ সফল কোয়েরি — উদাহরণস্বরূপ, নমুনায় $.store.book[?(@.price > 1000)] সহজভাবে বোঝায় কোনো বই-ই এত ব্যয়বহুল নয়। হেডারটি কোনো ত্রুটি ছাড়াই “0টি মিল” পড়ে। এক্সপ্রেশন নিজেই যখন আনপার্সেবল তখনই পৃষ্ঠাটি একটি ত্রুটি রিপোর্ট করে।

একটি ফিল্টার কেন অনির্দিষ্ট JavaScript সম্পাদন করে না?#

ফিল্টারগুলো একটি নিবেদিত এক্সপ্রেশন পার্সার দিয়ে মূল্যায়ন করা হয় যা তুলনা, বুলিয়ান অপারেটর এবং @-রেফারেন্স বোঝে — এটি কখনো কোড তৈরি করে চালায় না। এটি ইচ্ছাকৃত: এটি টুলটিকে এমন JSON-এর দিকে নির্দেশ করতে নিরাপদ রাখে যা আপনি সম্পূর্ণ বিশ্বাস করেন না, এবং পৃষ্ঠাটিকে ব্রাউজারের কন্টেন্ট-সিকিউরিটি নীতির ভেতরে রাখে।

JSONPath কি নোড এডিট বা সরিয়ে দিতে পারে?#

না — এটি একটি শুধু-পঠনযোগ্য কোয়েরি টুল। এটি নির্বাচন করে এবং প্রদর্শন করে, এটি আপনার JSON পরিবর্তন করে না। আপনি যদি দেখতে চান দুটি নথি কীভাবে আলাদা, তবে /en/json/diff/ টুলটি ব্যবহার করুন।