এক্সকিউরি / এক্সপ্যাথের জেএসএন সমতুল্য কি আছে?


221

জটিল JSON অ্যারে এবং হ্যাশগুলিতে আইটেমগুলি অনুসন্ধান করার সময়, যেমন:

[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [
            // etc.
        }]
    }
]

আইটেমটি খুঁজতে আমি কি কোনও ধরণের কোয়েরি ভাষা ব্যবহার করতে পারি in [0].objects where id = 3?


না আপনি না করা না। সার্ভারে জিজ্ঞাসাবাদ ছেড়ে দিন, এবং কেবলমাত্র আপনার প্রয়োজনীয় ডেটা পেতে REST ব্যবহার করুন।
zzzzBov

5
+1 ভাল ধারণা। আগামীকাল এটি লিখতে

2
এক্সপথ নয়, তবে আমি জিনলিককে বেশ ভাল পেয়েছি (যা পড়ার মতো কোড তৈরি করে in(...).where(...).select(...)): hugoware.net/Projects/jLinq
pimvdb

4
এটি হতাশার কারণ এখানে প্রচুর লাইব্রেরি রয়েছে, তবে কোনও সাধারণভাবে গৃহীত মানের কাছে পৌঁছায় না। আমাদের কাছে তৃতীয় পক্ষের দ্বারা ব্যবহৃত একটি গ্রন্থাগার রয়েছে তাই আমাদের কাছে একটি কোয়েরি ভাষা সরবরাহ করা প্রয়োজন যা বহুল পরিচিত এবং ব্যবহৃত।
ডেভিড থিলেন

1
অবশ্যই, আপনি জেসেল ব্যবহার করতে পারেন - github.com/dragonworx/jsel - dataআপনার ভেরিয়েবলের সাথে আপনার জেএসওএন অবজেক্ট রয়েছে, আপনি লিখতে পারেন: jsel(data).select("//*[@id=3]")এবং এটি আইডি কীযুক্ত অবজেক্টটি 3 দিয়ে ফিরে আসবে
আলী

উত্তর:


122

হ্যাঁ, এটিকে JSONPath বলা হয় । সোর্সটি এখন গিটহাবে রয়েছে

এটি ডিওজেওতেও সংহত হয়েছে ।


3
ব্রায়ানের উত্তরটি পরামর্শ দেয় যে ডোজোতে জসনপ্যাথ মডিউলটির পরিবর্তে জাসনকোয়ারি মডিউলটি ব্যবহার করা উচিত ।
hugomg

5
এটা কতটা শক্ত? এবং আমি জাভা বা সি # সংস্করণটি খুঁজে পাই না যা আমাদের জন্য একটি ডিল কিলার।
ডেভিড থিলেন

2
এখানে লিঙ্কযুক্ত সাইট জাভাস্ক্রিপ্ট এবং পিএইচপি জন্য উপলব্ধ। আপনার যদি জাভা প্রয়োগের প্রয়োজন হয় তবে এখানে একটি রয়েছে: code.google.com/p/json-path
ম্যাথিয়াস

2
আমার উল্লেখ করা উচিত যে জেএসওনপথ এক্সপাথ ফর্মাল সিরামিকের ভিত্তিতে নয়। জেএসনিক আরও ভাল বিকল্প হতে পারে।
wcandillon

1
@ পরামিলেওন এটি দুর্দান্ত কাজ করে। প্রকল্পটি যাইহোক , গিটহাবে স্থানান্তরিত করা হয়েছে । মাইক উত্তরে এটি যুক্ত করতে চাইতে পারে, যেহেতু লোকেরা এ সম্পর্কে মন্তব্য করে চলে।
ফ্রাঙ্কলিন ইউ

21

আমি মনে করি জেএসকনকিউরিটি জেএসওনপ্যাথের সুপারস্টার এবং এভাবে এটি ডোজোতে প্রতিস্থাপন করে । তারপরে আরকিউএলও রয়েছে

দোজো ডকুমেন্টেশন থেকে:

সুরক্ষা, ব্যবহারের সহজলভ্যতা, এবং ফিল্টারিং, পুনরাবৃত্ত অনুসন্ধান, বাছাইকরণ, মানচিত্রকরণ, পরিসীমা নির্বাচন, এবং ওয়াইল্ডকার্ড স্ট্রিং তুলনা এবং বিভিন্ন অপারেটরগুলির সাথে নমনীয় এক্সপ্রেশন সহ একাধিক ডেটা ক্যোয়ারিং সরঞ্জামগুলির বিস্তৃত সেট সহ জেএসওনকোথ্রি JSONPath এর বর্ধিত সংস্করণ।

জেএসোনস্লাইকের প্রশ্নের অন্য দৃষ্টিভঙ্গি রয়েছে (এক্সপ্যাথের পরিবর্তে সিএসএস নির্বাচক-জাতীয়) এবং একটি জাভাস্ক্রিপ্ট বাস্তবায়ন রয়েছে


4
গিথুব জেএসওনকিউয়ারি লিঙ্কটি মারা গেছে বলে মনে হচ্ছে। জেএসএনস্লাইকের কাছে এখন একটি জাভাস্ক্রিপ্ট সংস্করণ রয়েছে।
হেনরিক এ্যাসটেড সেরেনসেন

19

অন্যান্য বিকল্পগুলি সম্পর্কে আমি সচেতন are

  1. জেএসোনিক স্পেসিফিকেশন, যা ভাষার দুটি উপপ্রকার নির্দিষ্ট করে: একটি যা এক্সএমএল বিশদটি গোপন করে এবং জেএস-এর মতো সিনট্যাক্স সরবরাহ করে, এবং একটি যা জেএসএন কনস্ট্রাক্টর এবং এর সাথে এক্সকিয়ার সিনট্যাক্সকে সমৃদ্ধ করে। জোরবা জেএসোনিককে প্রয়োগ করে।
  2. মার্কোনজিকের শীর্ষে নির্মিত করোনা এক্সএমএল, জেএসওএন, পাঠ্য এবং বাইনারি সামগ্রী সংরক্ষণ, পরিচালনা এবং অনুসন্ধানের জন্য একটি আরআরএস ইন্টারফেস সরবরাহ করে।
  3. মার্কলজিক 6 এবং পরে বক্সের বাইরে করোনার মতো একটি অনুরূপ আরএসটি ইন্টারফেস সরবরাহ করে।
  4. মার্কলজিক 8 এবং পরবর্তীতে JSON কে তাদের XQuery এবং সার্ভার-সাইড জাভাস্ক্রিপ্ট পরিবেশে স্থানীয়ভাবে সমর্থন করে। আপনি এটিতে এক্সপ্যাথ প্রয়োগ করতে পারেন।

আছে HTH।


3
এখন একটি জেএসোনিক বাস্তবায়ন চলছে: জোর্বা ২.6 এটি আনুষ্ঠানিকভাবে সমর্থন করে।
ঝিসলাইন ফোরনি

দ্রষ্টব্য: মার্কলজিক JSON স্থানীয়ভাবে সংস্করণ 8 অনুসারে সঞ্চয় করে এবং এটিতে সরাসরি এক্সপ্যাথ প্রয়োগ করার অনুমতি দেয়।
grtjn

18

জেএসওএন ডেটা ট্র্যাভার্সিং / ফিল্টারিংয়ের জন্য বর্তমান কয়েকটি বিকল্পের সংক্ষিপ্ত বিবরণ এবং কিছু সিনট্যাক্স উদাহরণ সরবরাহ করতে ...

আমি মনে করি জেএসপ্যাথ সবচেয়ে ভাল দেখাচ্ছে, তাই আমি এটি চেষ্টা করতে এবং এটি আমার AngularJS + CakePHP অ্যাপ্লিকেশনটির সাথে সংহত করতে যাচ্ছি।

(আমি মূলত এই উত্তরটি অন্য থ্রেডে পোস্ট করেছি তবে ভেবেছিলাম এটি এখানেও কার্যকর হবে))


দুর্দান্ত সংক্ষিপ্তসার এবং উদাহরণগুলি, সিএসএস নির্বাচক বা এক্সপ্যাথ উভয়ের মধ্যে পাওয়া অনুপ্রেরণার উল্লেখ করার কারণে।
জোহেম শুলেনক্লাপ্পার

13

জেএসপ্যাথ ব্যবহার করার চেষ্টা করুন

জেএসপ্যাথ একটি ডোমেন-নির্দিষ্ট ভাষা (ডিএসএল) যা আপনাকে আপনার জেএসওএন নথিগুলির মধ্যে ডেটা নেভিগেট এবং সন্ধান করতে সক্ষম করে। জেএসপ্যাথ ব্যবহার করে আপনি জেএসএনের আইটেমগুলিতে থাকা ডেটা পুনরুদ্ধার করতে পারেন select

এক্সএমএলের জন্য এক্সপ্যাথের মতো জেএসএনের পক্ষে জেএসপ্যাথ।

এটি নোড.জেএস এবং আধুনিক ব্রাউজারগুলির জন্য উভয়কেই ভারী অনুকূলিত করা হয়েছে।


9

প্রসেসর জেএসওএন সমর্থন সরবরাহ করে তবে জাসনকে জিজ্ঞাসা করতে এক্সকিউরি ব্যবহার করা যেতে পারে। "আইডি" = 1 দিয়ে অবজেক্টগুলি খুঁজতে কীভাবে বেসএক্স ব্যবহার করা যেতে পারে এটি একটি সহজ উদাহরণ:

json:parse('[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [ "etc." ] }
    ]}
]')//value[.//id = 1]

(6 বছর অবধি) স্যাকসন এক্সকিউয়ারি 3.1 চালাবে, যা জেএসএনকে জিজ্ঞাসা করে। আমার স্যাকসনের অভিজ্ঞতা জাভা দ্বারা চালিত জার ফাইলটি ব্যবহার করছে। স্যাকসন-জাভা নামে একটি নোড মডিউল রয়েছে তবে আমি নিশ্চিত নই যে কীভাবে ডাব্লু / জেসন কাজ করে। এবং স্যাক্সোনিকা থেকে স্যাকসন-জেএস নামে আরও একটি নতুন জিনিস এসেছে।
চার্লস রস 18

9

এখানে কি একধরণের কোয়েরি ভাষা রয়েছে ...

jq একটি সংজ্ঞায়িত জে ছেলে কুই uery ভাষা যে খুব JSONPath অনুরূপ - দেখুন https://github.com/stedolan/jq/wiki/For-JSONPath-users

... [কোন] আমি [0] .জন্য যেখানে আইডি = 3 এ একটি আইটেম খুঁজে পেতে ব্যবহার করতে পারি?

আমি এর অর্থ ধরে নিচ্ছি: নির্ধারিত কী এর অধীনে সমস্ত JSON অবজেক্ট আইডি == 3 সহ সন্ধান করুন, বস্তু যেখানেই থাকুক না কেন। একটি সম্পর্কিত JQ ক্যোয়ারী হবে:

.[0].objects | .. | objects | select(.id==3)

কোথায় "|" পাইপ-অপারেটর (যেমন কমান্ড শেল পাইপ হিসাবে), এবং যেখানে বিভাগটি ".. | অবজেক্টস" "বস্তুটি যেখানেই থাকুক না কেন" এর সাথে মিলে যায়।

জেকিউ এর বেসিকগুলি মূলত সুস্পষ্ট বা স্বজ্ঞাত বা কমপক্ষে বেশ সহজ, এবং যদি আপনি কমান্ড-শেল পাইপগুলির সাথে কিছুটা পরিচিত হন তবে বেশিরভাগটিকে বেছে নেওয়া সহজ। Jq প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী টিউটোরিয়াল এবং মত পয়েন্টার হয়েছে।

জিকিউ এসকিউএল এর মতোও এটি CRUD অপারেশনগুলিকে সমর্থন করে, যদিও জকিউ প্রসেসর কখনও তার ইনপুটটিকে ওভাররাইট করে না। জিকিউ জেএসএন সত্ত্বার স্ট্রিমগুলিও পরিচালনা করতে পারে।

আপনি জেএসওএন-ভিত্তিক ক্যোয়ারী ভাষা নির্ধারণের ক্ষেত্রে আরও দুটি মানদণ্ড বিবেচনা করতে পারেন:

  • এটি কি নিয়মিত প্রকাশকে সমর্থন করে? (পিসিআরই রিজেক্সের জন্য জ্যাকিউ ১.৫ এর ব্যাপক সমর্থন রয়েছে)
  • এটি কি টুরিং-সম্পূর্ণ? (হাঁ)

8

ডিফিয়ান্ট.জেস দেখতে খুব সুন্দর লাগে, এখানে একটি সাধারণ উদাহরণ:

var obj = {
        "car": [
            {"id": 10, "color": "silver", "name": "Volvo"},
            {"id": 11, "color": "red",    "name": "Saab"},
            {"id": 12, "color": "red",    "name": "Peugeot"},
            {"id": 13, "color": "yellow", "name": "Porsche"}
        ],
        "bike": [
            {"id": 20, "color": "black", "name": "Cannondale"},
            {"id": 21, "color": "red",   "name": "Shimano"}
        ]
    },
    search = JSON.search(obj, '//car[color="yellow"]/name');

console.log( search );
// ["Porsche"]

var reds = JSON.search(obj, '//*[color="red"]');

for (var i=0; i<reds.length; i++) {
    console.log( reds[i].name );
}
// Saab
// Peugeot
// Shimano

দুর্ভাগ্যক্রমে, এই মুহুর্তে এনএমপি তে প্রকাশিত হয়নি এবং ম্যানুয়াল ইনস্টলেশন দরকার ...
অ্যান্ড্রু মাও


7

জেসেল দুর্দান্ত এবং এটি একটি বাস্তব এক্সপথ ইঞ্জিনের উপর ভিত্তি করে। এটি আপনাকে কেবলমাত্র বস্তুগুলিতে নয় (স্ট্রিংগুলিও) নয়, কোনও ধরণের জাভাস্ক্রিপ্ট ডেটা খুঁজে পেতে এক্সপথ এক্সপ্রেশন তৈরি করতে দেয়।

এক্সপথ ইঞ্জিন দ্বারা আপনার ডেটা কীভাবে চলতে পারে তার উপর আপনাকে সম্পূর্ণ নিয়ন্ত্রণ দেওয়ার জন্য আপনি কাস্টম স্কিমা এবং ম্যাপিং তৈরি করতে পারেন। স্কিমা হ'ল সংজ্ঞা দেওয়ার একটি উপায় যা আপনার ডেটাতে কীভাবে উপাদান, শিশু, বৈশিষ্ট্য এবং নোডের মান নির্ধারণ করা হয়। তারপরে আপনি নিজের মত প্রকাশ করতে পারেন to

আপনার একটি ভেরিয়েবল বলা হয়েছিল dataযা প্রশ্ন থেকে জেএসওএন রয়েছে, আপনি লিখতে জেসেল ব্যবহার করতে পারেন:

jsel(data).select("//*[@id=3]")

এটি id3 এর গুণাবলী সহ যে কোনও নোডকে ফিরিয়ে দেবে An একটি অ্যাট্রিবিউট কোনও বস্তুর মধ্যে কোনও আদিম (স্ট্রিং, সংখ্যা, তারিখ, রেজেক্স) মান)


6

অবজেক্টপথ XPath বা JSONPath এর অনুরূপ একটি কোয়েরি ভাষা তবে এম্বেড পাটিগণিত গণনা, তুলনা পদ্ধতি এবং অন্তর্নির্মিত ফাংশনগুলির জন্য অনেক বেশি শক্তিশালী ধন্যবাদ। বাক্য গঠনটি দেখুন:

50 টিরও কম দামের লাল রঙের এবং সমস্ত জুতা দোকানেই সন্ধান করুন

shoes .. জুতা। * [রঙ "লাল" এবং দাম <50]


আমি ওয়েবসাইটটির প্রথম উদাহরণটি পছন্দ করি এবং এটি দুর্দান্ত যে অবজেক্টপথটি একটি ইন্টারেক্টিভ, শেল-জাতীয় মোডে চালানো যেতে পারে তবে আমি যা খুঁজছি তা পাইথন স্ক্রিপ্টে অবজেক্টপথ ব্যবহার করা। আপনি কি আমাকে উদাহরণ হিসাবে নির্দেশ করতে পারেন যাতে অবজেক্টপথটি একটি গ্রন্থাগার হিসাবে কীভাবে ব্যবহার করতে হয়? ওয়েবসাইটে তেমন কিছু পাই না।
পাইকুক

গিথুবে পাইথন ব্যবহার সম্পর্কে বিভাগটি দেখুন । আমরা এটি ওয়েবসাইটে যুক্ত করব - এই মুহূর্তে এটি পাওয়া সত্যিই কঠিন। আপনার যদি আরও কোনও সহায়তার প্রয়োজন হয় তবে আপনি গুগল গ্রুপে একটি প্রশ্ন পোস্ট করতে পারেন ।
ইলা বেদনারেক

আপনাকে ধন্যবাদ, ইলা, গিথুব পৃষ্ঠায় যে উদাহরণগুলি যুক্ত হয়েছিল সেগুলি হ'ল প্রয়োজন what
পাইকুক

4

@ নাফিউটুল - "ডিফায়েন্ট.জেএস" সহ, এক্সপাথ এক্সপ্রেশন দিয়ে জেএসএন কাঠামোটি জিজ্ঞাসা করা সম্ভব। এটি কীভাবে কাজ করে তার একটি ধারণা পেতে এই মূল্যায়নকারীটিকে দেখুন:

http://www.defiantjs.com/#xpath_evaluator

জেএসওনপথের বিপরীতে, "ডিফিয়েন্ট.জেএস" জেএসএন কাঠামোগুলিতে এক্সপাথের ক্যোরিয় সিনট্যাক্সের পূর্ণ-স্কেল সমর্থন সরবরাহ করে।

Defiant.js এর উত্স কোডটি এখানে পাওয়া যাবে:
https://github.com/hbi99/defiant.js


3

জেএমইএসপথটি আজকাল (২০২০ সালের হিসাবে) খুব জনপ্রিয় বলে মনে হচ্ছে এবং জেএসএনপথের সাথে বেশ কয়েকটি সমস্যা সমাধান করেছে। এটি অনেক ভাষার জন্য উপলব্ধ।


1

আপনি যদি আমার মতো হন এবং আপনি কেবল পাথ-ভিত্তিক লুকআপ করতে চান তবে বাস্তব এক্সপ্যাথের বিষয়ে চিন্তা করবেন না, লোডাশের _.get()কাজ করতে পারে। লোডাশ ডক্স থেকে উদাহরণ:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// → 3

_.get(object, ['a', '0', 'b', 'c']);
// → 3

_.get(object, 'a.b.c', 'default');
// → 'default'

দুর্ভাগ্যক্রমে এই ফাংশনটি কেবল একটি একক ফলাফল দিতে পারে, এটি মেলানো আইটেমগুলির একটি অ্যারে আনার পক্ষে সমর্থন করে না, যেখানে অন্য লাইব্রেরিগুলি আলোকিত হয়।
সাইমন পূর্ব

0

এটি ব্যবহার করে দেখুন - https://github.com/satyapaul/jpath/blob/master/JSONDataReader.java

এটি এক্সএমএলের জন্য এক্সপথের অনুরূপ লাইনে একটি খুব সাধারণ বাস্তবায়ন। এটি jpath হিসাবে নাম।


1
এই প্রশ্নটি জাভাস্ক্রিপ্ট ট্যাগ করা কিন্তু এই লাইব্রেরিটি জাভা
ট্রিপলির

এটির একটি জাভাস্ক্রিপ্ট সংস্করণও রয়েছে - github.com/satyapaul/jpath/blob/master/jpath.js প্রকল্পটির জন্য তিনি এখানে হোম পেজটি দিয়েছেন - github.com/satyapaul/jpath
সত্যজিৎ পল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.