ToolDeck

JSONPath পরীক্ষক

JSON ডেটার বিপরীতে JSONPath এক্সপ্রেশন পরীক্ষা করুন এবং ম্যাচিং ফলাফল দেখুন

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

JSON ইনপুট

ফলাফল

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

JSONPath কী?

JSONPath হলো JSON ডকুমেন্ট থেকে মান বের করার জন্য একটি কোয়েরি ভাষা। ২০০৭ সালে Stefan Goessner এটিকে XML-এর XPath-এর অনুরূপ হিসেবে প্রস্তাব করেন। JSONPath আপনাকে $.store.book[*].author-এর মতো এক্সপ্রেশন লিখতে দেয়, যা লুপ বা ম্যানুয়াল ট্র্যাভার্সাল কোড লেখা ছাড়াই একটি বই অ্যারের সব লেখক ফিল্ড নির্বাচন করে। ভাষাটি ফেব্রুয়ারি ২০২৪ সালে IETF কর্তৃক RFC 9535 হিসেবে মানসম্মত করা হয়েছে।

একটি JSONPath এক্সপ্রেশন সর্বদা $ দিয়ে শুরু হয়, যা ডকুমেন্টের মূলকে প্রতিনিধিত্ব করে। সেখান থেকে আপনি সিলেক্টর চেইন করতে পারেন: অবজেক্ট কী-এর জন্য ডট নোটেশন, অ্যারে ইন্ডেক্সের জন্য ব্র্যাকেট নোটেশন, সব চাইল্ডের জন্য ওয়াইল্ডকার্ড, এবং নেস্টিংয়ের প্রতিটি স্তর অনুসন্ধান করতে রিকার্সিভ ডিসেন্ট অপারেটর (..)। [?(@.price < 10)]-এর মতো ফিল্টার এক্সপ্রেশন আপনাকে মানের বিপরীতে মূল্যায়িত শর্তের ভিত্তিতে উপাদান নির্বাচন করতে দেয়।

JSONPath ব্যবহার করা হয় Postman-এর মতো API টেস্টিং টুলে, Datadog ও Splunk-এর মতো অবজার্ভেবিলিটি প্ল্যাটফর্মে, Apache NiFi-এর মতো ওয়ার্কফ্লো ইঞ্জিনে, এবং JavaScript, Python, Go, Java ও C#-জুড়ে প্রোগ্রামিং লাইব্রেরিতে। কোডে বা কনফিগে এম্বেড করার আগে আসল ডেটা দিয়ে এক্সপ্রেশন যাচাই করে নিলে JSON স্ট্রাকচার অনুমানের সাথে না মিললে নীরবে ব্যর্থ হওয়ার ঝামেলা এড়ানো যায়।

কেন এই JSONPath পরীক্ষক ব্যবহার করবেন?

হাতে JSONPath এক্সপ্রেশন লেখা ত্রুটিপ্রবণ। একটি ডট বাদ পড়া, ভুল ব্র্যাকেটের ধরন, বা ভুল ফিল্টার সিনট্যাক্স কোনো ত্রুটি বার্তা ছাড়াই খালি ফলাফল ফেরত দিতে পারে। এই টুল আপনার এক্সপ্রেশন কী ম্যাচ করছে তার তাৎক্ষণিক দৃশ্যমান প্রতিক্রিয়া দেয়।

তাৎক্ষণিক ফলাফল
JSON পেস্ট করুন, একটি এক্সপ্রেশন টাইপ করুন এবং রিয়েল টাইমে ম্যাচিং মান আপডেট হতে দেখুন। কোয়েরি যাচাই করতে কোনো স্ক্রিপ্ট চালানো বা পেজ রিলোড করার প্রয়োজন নেই।
🔒
প্রাইভেসি-ফার্স্ট
সমস্ত মূল্যায়ন আপনার ব্রাউজারে চলে। আপনার JSON ডেটা কখনো আপনার মেশিন ছেড়ে যায় না, তাই আপনি নিরাপদে প্রোডাকশন API প্রতিক্রিয়া বা শংসাপত্র ধারণকারী কনফিগ ফাইলের বিপরীতে এক্সপ্রেশন পরীক্ষা করতে পারেন।
📋
সরাসরি ফলাফল কপি করুন
এক ক্লিকে JSON হিসেবে ম্যাচড আউটপুট কপি করুন। পুনরায় ফরম্যাট না করেই টেস্ট অ্যাসার্শন, ডকুমেন্টেশন বা API রেসপন্স উদাহরণে পেস্ট করুন।
🛠️
কোনো সেটআপ প্রয়োজন নেই
ইনস্টল করার জন্য কোনো npm প্যাকেজ নেই, তৈরি করার জন্য কোনো Python ভার্চুয়ালএনভি নেই। পেজ খুলুন, ডেটা পেস্ট করুন এবং কোয়েরি শুরু করুন। ব্রাউজার সহ যেকোনো ডিভাইসে কাজ করে।

JSONPath ব্যবহারের ক্ষেত্রসমূহ

ফ্রন্টএন্ড ডেভেলপমেন্ট
API প্রতিক্রিয়া থেকে আপনার প্রয়োজনীয় নির্দিষ্ট নেস্টেড মান বের করুন, React স্টেট বা Vue কম্পিউটেড প্রপার্টিতে সংযুক্ত করার আগে। প্রথমে আসল API পেলোডের বিপরীতে আপনার পাথ এক্সপ্রেশন পরীক্ষা করুন।
ব্যাকএন্ড API টেস্টিং
Postman এবং REST-assured রেসপন্স বডি যাচাই করতে JSONPath ব্যবহার করে। টেস্ট স্ক্রিপ্টে কপি করার আগে এখানে আপনার অ্যাসার্শন এক্সপ্রেশন তৈরি ও যাচাই করুন, ডিবাগ চক্র কমিয়ে আনুন।
DevOps কনফিগারেশন
Kubernetes কাস্টম রিসোর্স ডেফিনিশন, AWS Step Functions এবং Terraform ডেটা সোর্স JSON আউটপুট থেকে মান বের করতে JSONPath এক্সপ্রেশন গ্রহণ করে। ডিপ্লয় করার আগে আপনার পাথ যাচাই করুন।
QA টেস্ট অটোমেশন
কনট্র্যাক্ট টেস্ট এবং ইন্টিগ্রেশন টেস্টের জন্য JSONPath-ভিত্তিক অ্যাসার্শন লিখুন। যাচাই করুন যে JSON কাঠামোতে ঐচ্ছিক বা নালযোগ্য ফিল্ড থাকলে আপনার এক্সপ্রেশন সঠিকভাবে প্রত্যাশিত মান ম্যাচ করে।
ডেটা পাইপলাইন এক্সট্র্যাকশন
Apache NiFi, Logstash এবং কাস্টম ETL স্ক্রিপ্ট আধা-কাঠামোগত লগ ডেটা ও ইভেন্ট স্ট্রিম থেকে ফিল্ড বের করতে JSONPath ব্যবহার করে। পাইপলাইন ডিপ্লয়মেন্টের আগে নমুনা পেলোডের বিপরীতে এক্সপ্রেশন পরীক্ষা করুন।
শেখা ও পরীক্ষা-নিরীক্ষা
JSONPath-এ নতুন শিক্ষার্থী ও ডেভেলপাররা স্থানীয় পরিবেশ ছাড়াই বিভিন্ন এক্সপ্রেশন নমুনা JSON-এর বিপরীতে চেষ্টা করে বুঝতে পারেন ওয়াইল্ডকার্ড, রিকার্সিভ ডিসেন্ট এবং ফিল্টার কীভাবে কাজ করে।

JSONPath সিনট্যাক্স রেফারেন্স

RFC 9535 আদর্শ JSONPath সিনট্যাক্স নির্ধারণ করে। নিচের টেবিলটি বেশিরভাগ কোয়েরিতে ব্যবহৃত অপারেটরগুলো কভার করে। সমস্ত এক্সপ্রেশন $ (রুট নোড) দিয়ে শুরু হয় এবং ডকুমেন্ট কাঠামো নেভিগেট করতে এক বা একাধিক সিলেক্টর চেইন করে।

অপারেটরবিবরণউদাহরণ
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath বনাম jq বনাম XPath

JSONPath, jq এবং XPath একই সমস্যা সমাধান করে (কাঠামোগত ডেটা কোয়েরি করা) কিন্তু ভিন্ন ফরম্যাট ও ব্যবহারের ক্ষেত্রে। JSONPath JSON লক্ষ্য করে এবং বেশিরভাগ ভাষায় একটি লাইব্রেরি হিসেবে পাওয়া যায়। jq নিজস্ব টুরিং-সম্পূর্ণ ফিল্টার ভাষা সহ একটি স্বতন্ত্র CLI টুল। XPath XML-এ কাজ করে এবং W3C স্পেসিফিকেশন স্ট্যাকের অংশ।

বৈশিষ্ট্যJSONPathjqXPath
ডেটা ফরম্যাটJSONJSONXML
প্রথম উপাদান অ্যাক্সেস$.store.book[0].store.book[0]/store/book[1]
রিকার্সিভ অনুসন্ধান$..price.. | .price?//price
ফিল্টার এক্সপ্রেশন[?(@.price<10)]select(.price < 10)[price<10]
স্পেসিফিকেশনRFC 9535stedolan.github.ioW3C XPath 3.1

কোড উদাহরণ

জনপ্রিয় ভাষা ও টুলে JSONPath এক্সপ্রেশন মূল্যায়ন করার উপায়। তুলনার জন্য প্রতিটি উদাহরণ একই বুকস্টোর JSON কাঠামো ব্যবহার করে।

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

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

JSONPath এবং jq-এর মধ্যে পার্থক্য কী?
JSONPath একটি কোয়েরি ভাষা যা অ্যাপ্লিকেশনে লাইব্রেরি হিসেবে এম্বেড করার জন্য ডিজাইন করা হয়েছে। এটি পাথ এক্সপ্রেশন ব্যবহার করে JSON ডকুমেন্ট থেকে ম্যাচিং মান ফেরত দেয়। jq হলো কন্ডিশনাল, ফাংশন এবং স্ট্রিং ইন্টারপোলেশন সহ JSON রূপান্তরের জন্য একটি পূর্ণ প্রোগ্রামিং ভাষা সহ একটি স্বতন্ত্র কমান্ড-লাইন টুল। JSONPath ব্যবহার করুন যখন আপনার কোড বা Postman-এর মতো টুলে এম্বেড করা কোয়েরি দরকার। jq ব্যবহার করুন অ্যাড-হক কমান্ড-লাইন ডেটা রূপান্তরের জন্য।
JSONPath কি একটি অফিসিয়াল মানদণ্ড?
হ্যাঁ। IETF ফেব্রুয়ারি ২০২৪ সালে RFC 9535 ("JSONPath: Query Expressions for JSON") প্রকাশ করেছে। এর আগে, JSONPath কেবল ২০০৭ সালের Stefan Goessner-এর একটি অনানুষ্ঠানিক স্পেসিফিকেশন হিসেবে বিদ্যমান ছিল, যার ফলে বিভিন্ন বাস্তবায়নের মধ্যে অসামঞ্জস্য দেখা দিয়েছিল। RFC 9535 ইন্টারঅপারেবিলিটির জন্য সিনট্যাক্স, সিম্যান্টিক্স এবং একটি নরমালাইজেশন ফরম্যাট নির্ধারণ করে।
JSONPath-এ রিকার্সিভ ডিসেন্ট (..) কীভাবে কাজ করে?
রিকার্সিভ ডিসেন্ট অপারেটর (..) JSON ডকুমেন্টের প্রতিটি স্তর অনুসন্ধান করে এটির পরে আসা কী খুঁজে বের করে। উদাহরণস্বরূপ, $..price কত গভীরে নেস্ট করা হোক না কেন "price" কী-এর সাথে সম্পর্কিত সমস্ত মান ফেরত দেয়। এটি একটি ডেপথ-ফার্স্ট ট্র্যাভার্সালের সমতুল্য যা ম্যাচিং নোড সংগ্রহ করে। মনে রাখবেন যে বড় ডকুমেন্টে, রিকার্সিভ ডিসেন্ট অনেক ফলাফল ফেরত দিতে পারে এবং সরাসরি পাথের চেয়ে ধীর হতে পারে।
JSONPath কি JSON ডেটা পরিবর্তন করতে পারে?
না। JSONPath একটি রিড-অনলি কোয়েরি ভাষা। এটি মান নির্বাচন করে ফেরত দেয় কিন্তু নোড সন্নিবেশ, আপডেট বা মুছে ফেলতে পারে না। JSONPath এক্সপ্রেশনের ভিত্তিতে JSON পরিবর্তন করতে, কোয়েরির পরে আপনার প্রোগ্রামিং ভাষার JSON ম্যানিপুলেশন ফাংশন ব্যবহার করতে হবে। Python-এ jsonpath-ng-এর মতো কিছু লাইব্রেরি ম্যাচ অবজেক্টে একটি set() মেথড প্রদান করে, কিন্তু এটি একটি লাইব্রেরি এক্সটেনশন, JSONPath স্পেসিফিকেশনের অংশ নয়।
JSONPath ফিল্টার এক্সপ্রেশনে @ প্রতীকের অর্থ কী?
@ প্রতীক ফিল্টার এক্সপ্রেশনে মূল্যায়িত হচ্ছে এমন বর্তমান নোড বোঝায়। $.store.book[?(@.price < 10)]-এ, ফিল্টার বই অ্যারের প্রতিটি উপাদানের উপর পুনরাবৃত্তি করে এবং @ পর্যায়ক্রমে প্রতিটি বই অবজেক্ট প্রতিনিধিত্ব করে। @.price বর্তমান বইয়ের price ফিল্ড অ্যাক্সেস করে। @ ছাড়া, ফিল্টার জানত না কোন নোডের প্রপার্টি পরীক্ষা করতে হবে।
JSONPath-এ বিশেষ অক্ষর বা স্পেস সহ কী কীভাবে পরিচালনা করব?
কোটস সহ ব্র্যাকেট নোটেশন ব্যবহার করুন: $['store']['book title']। ব্র্যাকেট নোটেশন যেকোনো কী-এর জন্য কাজ করে, ডট, স্পেস বা Unicode অক্ষর সহ কীগুলোর জন্যও। ডট নোটেশন ($.store.key) কেবল বৈধ আইডেন্টিফায়ার (অক্ষর, সংখ্যা, আন্ডারস্কোর) এমন কী-এর জন্য কাজ করে। RFC 9535 বাস্তবায়নকারীদের সিঙ্গেল-কোটেড এবং ডাবল-কোটেড উভয় ব্র্যাকেট নোটেশন সমর্থন করতে প্রয়োজন।
আমার JSONPath এক্সপ্রেশন কেন খালি ফলাফল ফেরত দেয়?
সবচেয়ে সাধারণ কারণগুলো হলো: একটি কী নামে টাইপো (JSONPath কেস-সেন্সিটিভ), বিশেষ অক্ষর ধারণকারী একটি কী-এর জন্য ডট নোটেশন ব্যবহার, শুরুতে $ রুট প্রতীক বাদ দেওয়া, বা একটি একক অবজেক্ট হলেও এটি অ্যারে মনে করা। আপনার JSON একটি পরীক্ষক টুলে পেস্ট করুন এবং প্রথমে সহজ সাব-এক্সপ্রেশন দিয়ে চেষ্টা করুন (যেমন $.store) যাতে আরো সিলেক্টর যোগ করার আগে আপনার পাথের প্রতিটি অংশ সঠিকভাবে সমাধান হচ্ছে তা যাচাই করা যায়।