জেএসএনের জন্য কি কোনও এক্সএসএলটি সমতুল্য? এক্সএসএলটি এক্সএমএল-এর মতো জেএসএন-তে আমাকে রূপান্তর করার অনুমতি দেওয়ার জন্য কিছু।
জেএসএনের জন্য কি কোনও এক্সএসএলটি সমতুল্য? এক্সএসএলটি এক্সএমএল-এর মতো জেএসএন-তে আমাকে রূপান্তর করার অনুমতি দেওয়ার জন্য কিছু।
উত্তর:
আকর্ষণীয় ধারণা। গুগলে কিছু অনুসন্ধান কিছু পৃষ্ঠার আগ্রহ প্রকাশ করেছে, যার মধ্যে রয়েছে:
আশাকরি এটা সাহায্য করবে.
জেএসএনের জন্য এক্সএসএলটি সমতুল্য - প্রার্থীদের একটি তালিকা (সরঞ্জাম এবং চশমা)
আপনি জেএসএনের জন্য এক্সএসএলটি ব্যবহার করতে পারেন fn: json-to-xML এর লক্ষ্য নিয়ে ।
এই বিভাগটি XSLT ব্যবহার করে JSON ডেটা প্রক্রিয়া করার অনুমতি দেয় এমন সুবিধাগুলি বর্ণনা করে।
জেকিউ জেএসএন ডেটার জন্য সেডের মতো - আপনি এটিকে টুকরো টুকরো করতে এবং ফিল্টার করতে এবং ম্যাপ করার জন্য এবং কাঠামোগত ডেটা একই স্বাচ্ছন্দ্যে রূপান্তর করতে পারেন যা সেড, আর্ক, গ্রেপ এবং বন্ধুরা আপনাকে পাঠ্য সহ খেলতে দেয়। বিভিন্ন ওএসের জন্য ইনস্টল প্যাকেজ রয়েছে।
জেজে হ'ল একটি কমান্ড লাইন ইউটিলিটি যা জেএসওএন নথি থেকে মানগুলি পুনরুদ্ধার বা আপডেট করার জন্য দ্রুত এবং সহজ উপায় সরবরাহ করে। এটি হুডের নীচে GJSON এবং SJSON দ্বারা চালিত।
কমান্ড-লাইন JSON প্রসেসিং সরঞ্জাম
- নতুন সিনট্যাক্স শেখার দরকার নেই
- সরল জাভাস্ক্রিপ্ট
- ফর্ম্যাট করা এবং হাইলাইট করা
- একক বাইনারি
জেএল ("জেএসওএন ল্যাম্বদা") জেএসওএনকে জিজ্ঞাসাবাদ এবং পরিচালনা করার জন্য একটি ক্ষুদ্র কার্যকরী ভাষা।
জাভাতে লেখা JSON থেকে JSON রূপান্তর লাইব্রেরি যেখানে ট্রান্সফর্মের জন্য "স্পেসিফিকেশন" নিজেই একটি JSON নথি।
JSON গ্রেপযোগ্য করুন! আপনি যা চান তার জন্য গ্রিপ করা আরও সহজ করে তুলতে এবং এটির জন্য পরম 'পথ' দেখতে গ্রাউন জেএসনকে বিচ্ছিন্ন কার্যভারে রূপান্তরিত করে। এটি এমন এপিআইগুলির অন্বেষণকে সহজ করে যা জেএসএনের বৃহত ব্লবগুলি ফিরিয়ে দেয় তবে ভয়ানক ডকুমেন্টেশন রয়েছে।
জেসন জেএসএনের সাথে কাজ করার জন্য একটি দ্রুত সিএলআই সরঞ্জাম। এটি কোনও একক-ফাইল নোড.জেএস স্ক্রিপ্ট যার কোনও বহিরাগত ডেপ নেই (নোড.জেএস নিজেই ব্যতীত)।
JSON-e হল JSON অবজেক্টগুলিতে এমবেডিং প্রসঙ্গে ডেটা-স্ট্রাকচার প্যারামিটারাইজেশন সিস্টেম। কেন্দ্রীয় ধারণা হ'ল একটি ডেটা স্ট্রাকচারকে "টেমপ্লেট" হিসাবে বিবেচনা করা এবং আউটপুট ডেটা কাঠামো উত্পাদন করতে অন্য ডেটা স্ট্রাকচারকে প্রসঙ্গে হিসাবে রূপান্তর করা।
জেএসএলটি হ'ল জেএসএনের একটি সম্পূর্ণ প্রশ্ন এবং রূপান্তর ভাষা। ভাষা নকশাটি জেকিউ, এক্সপ্যাথ এবং এক্সকিউয়ারি দ্বারা অনুপ্রাণিত।
JSONata হ'ল JSON ডেটার জন্য একটি হালকা প্রশ্ন ও ট্রান্সফর্মেশন ভাষা। এক্সপ্যাথ ৩.১-এর 'লোকেশন পাথ' শব্দার্থবিদ্যার দ্বারা অনুপ্রাণিত হয়ে, পরিশীলিত ক্যোয়ারিকে একটি কমপ্যাক্ট এবং স্বজ্ঞাত স্বরলিপিতে প্রকাশ করার অনুমতি দেয়।
JSON ডেটা রুপান্তর করতে পুনরাবৃত্ত, প্যাটার্ন-মেলানো পদ্ধতির সরবরাহ করে। রূপান্তরগুলি নিয়মের একটি সেট হিসাবে সংজ্ঞায়িত করা হয় যা কোনও জেএসওএন অবজেক্টের কাঠামোর সাথে মেলে। যখন কোনও ম্যাচ ঘটে, নিয়মটি রূপান্তরিত ডেটা নির্গত করে optionচ্ছিকভাবে শিশু সামগ্রীতে রূপান্তর করতে পুনরাবৃত্তি করে।
জাসওক অ্যাজকের মতো, তবে জেএসএন-র জন্য। আপনি স্টিডিন থেকে পড়া জেএসওন অবজেক্টের একটি অ্যারের সাথে কাজ করেন, স্টাডাউটে মুদ্রিত ফলাফলের অ্যারে তৈরি করতে জাভাস্ক্রিপ্ট ব্যবহার করে এগুলি ফিল্টার করুন।
পরীক্ষাগুলি নথি হিসাবে ব্যবহার করা যেতে পারে https://github.com/pasaran/yate/tree/master/tests
JSONPath ব্যবহার করে কোনও অবজেক্টের আক্ষরিক থেকে ডেটা টানুন এবং কোনও টেমপ্লেটের ভিত্তিতে একটি নতুন অবজেক্ট তৈরি করুন।
স্ট্যাপলিং একটি জাভাস্ক্রিপ্ট লাইব্রেরি যা JSON অবজেক্টের জন্য এক্সএসএলটি ফর্ম্যাটিং সক্ষম করে। একটি জাভাস্ক্রিপ্ট টেম্প্লেটিং ইঞ্জিন এবং পাঠ্য / এইচটিএমএল টেমপ্লেটগুলি ব্যবহার করার পরিবর্তে স্ট্যাপলিং আপনাকে এক্সএসএলটি টেম্পলেটগুলি ব্যবহার করার সুযোগ দেয় - আপনার জেএসএন ডেটাসোর্সগুলি বিশ্লেষণের জন্য অ্যাজাক্সের সাথে অ্যাসিঙ্ক্রোনালি লোড করা হয়েছে এবং তারপরে ক্লায়েন্ট সাইডকে ক্যাশে করা হয়েছে।
জেএসএন পয়েন্টার একটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) নথির মধ্যে একটি নির্দিষ্ট মান সনাক্তকরণের জন্য একটি স্ট্রিং সিনট্যাক্সকে সংজ্ঞায়িত করে।
এক্সপিথ এক্সপ্রেশনটি কোনও এক্সএমএল ডকুমেন্টের সাথে সংমিশ্রণে ব্যবহৃত হয়, জেএসএনপথ এক্সপ্রেশন সর্বদা জেএসএন কাঠামোকে একইভাবে উল্লেখ করে
জেএসএনের জেএসপ্যাথ এক্সএমএলের জন্য এক্সপথের মতো "
জেএসোনিকের পেছনের অনুপ্রেরণার মূল উত্স হ'ল এক্সকিউরি, যা এখন পর্যন্ত আধা-কাঠামোগত ডেটার জন্য একটি সফল এবং উত্পাদনশীল কোয়েরি ভাষা প্রমাণিত হয়েছে
জোলটি চেষ্টা করুন । এটি জাভাতে লেখা একটি JSON থেকে JSON রূপান্তর লাইব্রেরি।
এটি বিশেষত তৈরি করা হয়েছিল কারণ আমরা "জেএসএন -> এক্সএমএল -> এক্সএসএলটি -> এক্সএমএল -> জেএসএন" গেমটি খেলতে চাইনি এবং পর্যাপ্ত জটিল রূপান্তরিত করার জন্য কোনও টেম্পলেট ব্যবহার করা আপত্তিযোগ্য নয়।
জকিউ - লাইটওয়েট এবং নমনীয় কমান্ড-লাইন জেএসএন প্রসেসর
এটি এক্সএসএলটির মতো টেমপ্লেট-ভিত্তিক নয়, বরং আরও সংক্ষিপ্ত। উদাহরণস্বরূপ একটি অ্যারের মধ্যে নিষ্কাশন name
এবং address
ক্ষেত্র:[.name, .address]
টিউটোরিয়াল টুইটার এর তাদেরকে JSON এপিআই রূপান্তর একটি উদাহরণ মাধ্যমে পদচারনা (এবং ম্যানুয়াল অনেক উদাহরণ আছে)।
.. | .attr_name?
আপনি কি খুঁজছেন? ( stedolan.github.io/jq/manual/#RecursiveDescent থেকে : .. )
এক্সএসএলটি জেএসএনকে যেমনটি দেখেছিল তেমন সমর্থন করে http://www.w3.org/TR/xslt-30-30/#json-র
এক্সএমএল ডিলিমিটার টোকেনগুলির জন্য কৌণিক বন্ধনী ব্যবহার করে, জেএসএন ব্রেস, বর্গাকার বন্ধনী, ... I. ই ব্যবহার করে। এক্সএমএল এর কম টোকেন স্বীকৃতি তুলনা মানে এটি ঘোষণামূলক রূপান্তরকরণের জন্য অনুকূলিত হয়েছে, অন্যদিকে তুলনা, সুইচ স্টেটমেন্টের মতো হওয়া, গতির কারণে অনুমানমূলক শাখার পূর্বাভাস ধরে নিয়েছে যে স্ক্রিপ্টিং ভাষাগুলিতে অপরিহার্য কোডটি কার্যকর। প্রত্যক্ষ ফলাফল হিসাবে, আধা-কাঠামোগত ডেটার বিভিন্ন মিশ্রণের জন্য, আপনি প্রতিক্রিয়াশীল পৃষ্ঠাগুলির অংশ হিসাবে এক্সএসএলটি এবং জাভাস্ক্রিপ্ট ইঞ্জিনগুলির কার্যকারিতাটি বেনমার্ক করতে চাইতে পারেন। নগন্য ডেটা পেলোডের জন্য, এক্সএমএল সিরিয়ালাইজেশন ছাড়াই রূপান্তরগুলি JSON এর সাথে ঠিক একইভাবে কাজ করতে পারে। ডাব্লু 3 এর সিদ্ধান্তটি আরও ভাল বিশ্লেষণের ভিত্তিতে হওয়া উচিত।
আমি সম্প্রতি একটি সরঞ্জাম পেয়েছি যা আমি JSON স্টাইলিংয়ের জন্য পছন্দ করি: https://github.com/twigkit/tempo । ব্যবহারের জন্য খুব সহজ সরঞ্জাম - আমার মতে এক্সএসএলটি-র তুলনায় এটি কাজ করা অনেক সহজ - এক্সপ্যাথ প্রশ্নের প্রয়োজন নেই eries
কটাক্ষপাত আছে -রুপান্তর jsonpath-বস্তুর
সরঞ্জামের অভাব বলতে প্রয়োজনের অভাবকে বোঝায় কেবল প্রশ্নটি করা। এটি লিনাক্সে এক্স বা ওয়াইয়ের জন্য সমর্থন করার জন্য প্রয়োগ করা যেতে পারে (কেন এমন সংখ্যালঘু ওএসের জন্য মানের ড্রাইভার এবং / অথবা গেমগুলি বিকাশ করতে বিরক্ত করবেন? এবং এমন কোনও ওএসের দিকে কেন মনোযোগ দিন যে বড় গেম এবং হার্ডওয়্যার সংস্থাগুলি বিকাশ করে না?)। সম্ভবত যাদের XSLT এবং JSON ব্যবহার করতে হবে তাদের কিছুটা তুচ্ছ কাজ ব্যবহার শেষ হবে: JSON কে এক্সএমএলে রূপান্তর করা। তবে এটি সর্বোত্তম সমাধান নয়, তাই না?
যখন আপনার একটি নেটিভ জেএসওএন ফর্ম্যাট থাকে এবং আপনি এটি ব্রাউজারে "ওয়াইসওয়াইগ" সম্পাদনা করতে চান, এক্সএসএলটি সমস্যার পর্যাপ্ত সমাধানের চেয়ে আরও বেশি কিছু হতে পারে। Traditionalতিহ্যবাহী জাভাস্ক্রিপ্ট প্রোগ্রামিংয়ের সাহায্যে এটি পাছায় ব্যথা হয়ে উঠতে পারে।
প্রকৃতপক্ষে, আমি এক্সএসএলটি-তে একটি "প্রস্তর-যুগ" পদ্ধতির প্রয়োগ করেছি, জাভাস্ক্রিপ্টের জন্য কিছু বেসিক কমান্ডের ব্যাখ্যা করতে সাবস্ট্রিং পার্সিং ব্যবহার করে, যেমন একটি টেমপ্লেট কল করা, শিশুদের প্রসেস করা ইত্যাদি J অবশ্যই জেএসওএন অবজেক্টের সাথে ট্রান্সফর্মেশন ইঞ্জিন বাস্তবায়নের চেয়ে অনেক সহজ than এক্সএসএলটি পার্স করার জন্য একটি পূর্ণাঙ্গ এক্সএমএল পার্সার বাস্তবায়ন করছে। সমস্যাটি হ'ল, কোনও জেএসওএন অবজেক্টকে রূপান্তর করতে এক্সএমএল টেমপ্লেটগুলি ব্যবহার করার জন্য আপনাকে টেমপ্লেটগুলির এক্সএমএল বিশ্লেষণ করতে হবে।
এক্সএমএল (বা এইচটিএমএল, বা পাঠ্য বা যাই হোক না কেন) এর সাথে একটি জেএসওএন অবজেক্টকে ট্রান্সফর্ম করার জন্য আপনাকে সিনট্যাক্স এবং রূপান্তর আদেশগুলি সনাক্ত করতে আপনাকে কোন বিশেষ অক্ষর ব্যবহার করতে হবে সে সম্পর্কে যত্ন সহকারে চিন্তা করতে হবে। অন্যথায় আপনি নিজের কাস্টম টেম্প্লেটিং ভাষার জন্য একটি পার্সার ডিজাইন করে শেষ করতে পারেন। এই পথটি অতিক্রম করে আমি আপনাকে বলতে পারি যে এটি সুন্দর নয়।
আপডেট (নভেম্বর 12, 2010): আমার পার্সারটিতে কয়েক সপ্তাহ কাজ করার পরে, আমি এটি অনুকূল করতে সক্ষম হয়েছি। টেমপ্লেটগুলি আগেই পার্স করা হয় এবং কমান্ডগুলি JSON অবজেক্ট হিসাবে সংরক্ষণ করা হয়। রূপান্তর বিধিগুলি হ'ল জেএসওএন অবজেক্টস, যখন টেমপ্লেট কোডটি এইচটিএমএল এবং শেল কোডের অনুরূপ হোমব্রিউ সিনট্যাক্সের মিশ্রণ। ডকুমেন্ট এডিটর তৈরি করতে আমি একটি জটিল জেএসওএন ডকুমেন্টকে এইচটিএমএল রূপান্তর করতে সক্ষম হয়েছি। কোডটি সম্পাদকের জন্য প্রায় 1K লাইন (এটি একটি ব্যক্তিগত প্রকল্পের জন্য তাই আমি এটি ভাগ করতে পারি না) এবং জেএসএন রূপান্তর কোডের জন্য প্রায় 990 লাইন (পুনরাবৃত্তির আদেশ, সহজ তুলনা, টেমপ্লেট কলিং, ভেরিয়েবল সংরক্ষণ এবং মূল্যায়ন অন্তর্ভুক্ত)। আমি এটি একটি এমআইটি লাইসেন্সের অধীনে প্রকাশ করার পরিকল্পনা করছি। আপনি যদি জড়িত থাকতে চান তবে আমাকে একটি মেইল ফেলে দিন।
আমি এদিকে আমার নিজের ছোট্ট লাইব্রেরি লিখেছি, যা খুব কাছাকাছি থাকার চেষ্টা করে
5.1 প্রক্রিয়াকরণ মডেল (এক্সএসএলটি আরইসি) https://www.w3.org/TR/xslt#section-
জাভাস্ক্রিপ্ট কোডের কয়েকটি লাইনে যতটা সম্ভব সম্ভব (যেমন আমি যাই হোক না কেন)
ব্যবহারের কয়েকটি-সম্পূর্ণ-তুচ্ছ উদাহরণ এখানে দেওয়া হয়েছে ...
বেহালার: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
( ডি। ডকুমেন্ট উদাহরণ (এক্সএসএলটি আরইসি দ্বারা অনুপ্রাণিত ) https://www.w3.org/TR/xslt#section- ডকুমেন্ট- উদাহরণ )
যেখানে এই:
var D1document = {
type: "document", title: [ "Document Title" ],
"": [
{ type: "chapter", title: [ "Chapter Title" ],
"": [
{ type: "section", title: [ "Section Title" ],
"": [
{ type: "para", "": [ "This is a test." ] },
{ type: "note", "": [ "This is a note." ] }
] },
{ type: "section", title: [ "Another Section Title" ],
"": [
{ type: "para", "": [ "This is ", { emph: "another" }, " test." ] },
{ type: "note", "": [ "This is another note." ] }
] }
] }
] };
var D1toHTML = { $: [
[ [ function(node) { return node.type === "document"; } ],
function(root) {
return "<html>\r\n\
<head>\r\n\
<title>\r\n\
{title}\r\n".of(root) + "\
</title>\r\n\
</head>\r\n\
<body>\r\n\
{*}".of(root[""].through(this)) + "\
</body>\r\n\
</html>";
}
],
[ [ function(node) { return node.type === "chapter"; } ],
function(chapter) {
return " <h2>{title}</h2>\r\n".of(chapter) + "{*}".of(chapter[""].through(this));
}
],
[ [ function(node) { return node.type === "section"; } ],
function(section) {
return " <h3>{title}</h3>\r\n".of(section) + "{*}".of(section[""].through(this));
}
],
[ [ function(node) { return node.type === "para"; } ],
function(para) {
return " <p>{*}</p>\r\n".of(para[""].through(this));
}
],
[ [ function(node) { return node.type === "note"; } ],
function(note) {
return ' <p class="note"><b>NOTE: </b>{*}</p>\r\n'.of(note[""].through(this));
}
],
[ [ function(node) { return node.emph; } ],
function(emph) {
return "<em>{emph}</em>".of(emph);
}
]
] };
console.log(D1document.through(D1toHTML));
... দেয়:
<html>
<head>
<title>
Document Title
</title>
</head>
<body>
<h2>Chapter Title</h2>
<h3>Section Title</h3>
<p>This is a test.</p>
<p class="note"><b>NOTE: </b>This is a note.</p>
<h3>Another Section Title</h3>
<p>This is <em>another</em> test.</p>
<p class="note"><b>NOTE: </b>This is another note.</p>
</body>
</html>
এবং
বেহালার: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
যেখানে এই:
// (A "Company" is just an object with a "Team")
function Company(obj) {
return obj.team && Team(obj.team);
}
// (A "Team" is just a non-empty array that contains at least one "Member")
function Team(obj) {
return ({ }.toString.call(obj) === "[object Array]") &&
obj.length &&
obj.find(function(item) { return Member(item); });
}
// (A "Member" must have first and last names, and a gender)
function Member(obj) {
return obj.first && obj.last && obj.sex;
}
function Dude(obj) {
return Member(obj) && (obj.sex === "Male");
}
function Girl(obj) {
return Member(obj) && (obj.sex === "Female");
}
var data = { team: [
{ first: "John", last: "Smith", sex: "Male" },
{ first: "Vaio", last: "Sony" },
{ first: "Anna", last: "Smith", sex: "Female" },
{ first: "Peter", last: "Olsen", sex: "Male" }
] };
var TO_SOMETHING_ELSE = { $: [
[ [ Company ],
function(company) {
return { some_virtual_dom: {
the_dudes: { ul: company.team.select(Dude).through(this) },
the_grrls: { ul: company.team.select(Girl).through(this) }
} }
} ],
[ [ Member ],
function(member) {
return { li: "{first} {last} ({sex})".of(member) };
} ]
] };
console.log(JSON.stringify(data.through(TO_SOMETHING_ELSE), null, 4));
... দেয়:
{
"some_virtual_dom": {
"the_dudes": {
"ul": [
{
"li": "John Smith (Male)"
},
{
"li": "Peter Olsen (Male)"
}
]
},
"the_grrls": {
"ul": [
{
"li": "Anna Smith (Female)"
}
]
}
}
}
এর একটি জাভাস্ক্রিপ্ট সমতুল্য ...
এক্সএসএলটি ৩.০ আরইসি বিভাগ ১৪.৪ উদাহরণ: সাধারণ মানগুলির উপর ভিত্তি করে নোডকে গ্রুপিং করা
(at: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1) )
Cf. https://www.w3.org/TR/xslt-30/#grouping-examples
কোথায়...
var cities = [
{ name: "Milano", country: "Italia", pop: 5 },
{ name: "Paris", country: "France", pop: 7 },
{ name: "München", country: "Deutschland", pop: 4 },
{ name: "Lyon", country: "France", pop: 2 },
{ name: "Venezia", country: "Italia", pop: 1 }
];
/*
Cf.
XSLT 3.0 REC Section 14.4
Example: Grouping Nodes based on Common Values
https://www.w3.org/TR/xslt-30/#grouping-examples
*/
var output = "<table>\r\n\
<tr>\r\n\
<th>Position</th>\r\n\
<th>Country</th>\r\n\
<th>City List</th>\r\n\
<th>Population</th>\r\n\
</tr>{*}\r\n\
</table>".of
(
cities.select().groupBy("country")(function(byCountry, index) {
var country = byCountry[0],
cities = byCountry[1].select().orderBy("name");
return "\r\n\
<tr>\r\n\
<td>{position}</td>\r\n\
<td>{country}</td>\r\n\
<td>{cities}</td>\r\n\
<td>{population}</td>\r\n\
</tr>".
of({ position: index + 1, country: country,
cities: cities.map(function(city) { return city.name; }).join(", "),
population: cities.reduce(function(sum, city) { return sum += city.pop; }, 0)
});
})
);
... দেয়:
<table>
<tr>
<th>Position</th>
<th>Country</th>
<th>City List</th>
<th>Population</th>
</tr>
<tr>
<td>1</td>
<td>Italia</td>
<td>Milano, Venezia</td>
<td>6</td>
</tr>
<tr>
<td>2</td>
<td>France</td>
<td>Lyon, Paris</td>
<td>9</td>
</tr>
<tr>
<td>3</td>
<td>Deutschland</td>
<td>München</td>
<td>4</td>
</tr>
</table>
এর একটি জাভাস্ক্রিপ্ট সমতুল্য ...
জেএসনিক মামলাগুলি ব্যবহার করুন বিভাগ 1.1.2। জেএসএনের জন্য গ্রুপিং কোয়েরি
(এ: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Cf. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
কোথায়...
/*
1.1.2. Grouping Queries for JSON
http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
*/
var sales = [
{ "product" : "broiler", "store number" : 1, "quantity" : 20 },
{ "product" : "toaster", "store number" : 2, "quantity" : 100 },
{ "product" : "toaster", "store number" : 2, "quantity" : 50 },
{ "product" : "toaster", "store number" : 3, "quantity" : 50 },
{ "product" : "blender", "store number" : 3, "quantity" : 100 },
{ "product" : "blender", "store number" : 3, "quantity" : 150 },
{ "product" : "socks", "store number" : 1, "quantity" : 500 },
{ "product" : "socks", "store number" : 2, "quantity" : 10 },
{ "product" : "shirt", "store number" : 3, "quantity" : 10 }
];
var products = [
{ "name" : "broiler", "category" : "kitchen", "price" : 100, "cost" : 70 },
{ "name" : "toaster", "category" : "kitchen", "price" : 30, "cost" : 10 },
{ "name" : "blender", "category" : "kitchen", "price" : 50, "cost" : 25 },
{ "name" : "socks", "category" : "clothes", "price" : 5, "cost" : 2 },
{ "name" : "shirt", "category" : "clothes", "price" : 10, "cost" : 3 }
];
var stores = [
{ "store number" : 1, "state" : "CA" },
{ "store number" : 2, "state" : "CA" },
{ "store number" : 3, "state" : "MA" },
{ "store number" : 4, "state" : "MA" }
];
var nestedGroupingAndAggregate = stores.select().orderBy("state").groupBy("state")
( function(byState) {
var state = byState[0],
stateStores = byState[1];
byState = { };
return (
(
byState[state] =
products.select().orderBy("category").groupBy("category")
( function(byCategory) {
var category = byCategory[0],
categoryProducts = byCategory[1],
categorySales = sales.filter(function(sale) {
return stateStores.find(function(store) { return sale["store number"] === store["store number"]; }) &&
categoryProducts.find(function(product) { return sale.product === product.name; });
});
byCategory = { };
return (
(
byCategory[category] =
categorySales.select().orderBy("product").groupBy("product")
( function(byProduct) {
var soldProduct = byProduct[0],
soldQuantities = byProduct[1];
byProduct = { };
return (
(
byProduct[soldProduct] =
soldQuantities.reduce(function(sum, sale) { return sum += sale.quantity; }, 0)
),
byProduct
);
} ) // byProduct()
),
byCategory
);
} ) // byCategory()
),
byState
);
} ); // byState()
... দেয়:
[
{
"CA": [
{
"clothes": [
{
"socks": 510
}
]
},
{
"kitchen": [
{
"broiler": 20
},
{
"toaster": 150
}
]
}
]
},
{
"MA": [
{
"clothes": [
{
"shirt": 10
}
]
},
{
"kitchen": [
{
"blender": 250
},
{
"toaster": 50
}
]
}
]
}
]
এটি JSONPath কব্জিটির সীমাবদ্ধতাগুলি অতিক্রম করতেও কার্যকর। পূর্বসূর অক্ষের বিরুদ্ধে জিজ্ঞাসাবাদ করা, যেমন এই এসও প্রশ্নের উত্থাপন (এবং অবশ্যই অন্যরা)।
উদাহরণস্বরূপ, কীভাবে কোনও ব্র্যান্ড আইডি জেনে কোনও মুদি আইটেমের ছাড় পাবেন
{
"prods": [
{
"info": {
"rate": 85
},
"grocery": [
{
"brand": "C",
"brand_id": "984"
},
{
"brand": "D",
"brand_id": "254"
}
],
"discount": "15"
},
{
"info": {
"rate": 100
},
"grocery": [
{
"brand": "A",
"brand_id": "983"
},
{
"brand": "B",
"brand_id": "253"
}
],
"discount": "20"
}
]
}
?
একটি সম্ভাব্য সমাধান হ'ল:
var products = {
"prods": [
{
"info": {
"rate": 85
},
"grocery": [
{
"brand": "C",
"brand_id": "984"
},
{
"brand": "D",
"brand_id": "254"
}
],
"discount": "15"
},
{
"info": {
"rate": 100
},
"grocery": [
{
"brand": "A",
"brand_id": "983"
},
{
"brand": "B",
"brand_id": "253"
}
],
"discount": "20"
}
]
};
function GroceryItem(obj) {
return (typeof obj.brand === "string") && (typeof obj.brand_id === "string");
}
// last parameter set to "true", to grab all the "GroceryItem" instances
// at any depth:
var itemsAndDiscounts = [ products ].nodeset(GroceryItem, true).
map(
function(node) {
var item = node.value, // node.value: the current "GroceryItem" (aka "$.prods[*].grocery[*]")
discount = node.parent. // node.parent: the array of "GroceryItem" (aka "$.prods[*].grocery")
parent. // node.parent.parent: the product (aka "$.prods[*]")
discount; // node.parent.parent.discount: the product discount
// finally, project into an easy-to-filter form:
return { id: item.brand_id, discount: discount };
}
),
discountOfItem983;
discountOfItem983 = itemsAndDiscounts.
filter
(
function(mapped) {
return mapped.id === "983";
}
)
[0].discount;
console.log("Discount of #983: " + discountOfItem983);
... যা দেয়:
Discount of #983: 20
'আছে HTH,
সেখানে এখন! আমি সম্প্রতি ঠিক এই উদ্দেশ্যে একটি লাইব্রেরি, জেসন-ট্রান্সফর্ম তৈরি করেছি :
https://github.com/ColinEberhardt/json-transforms
এটি এক্সএসএলটি দ্বারা সরাসরি অনুপ্রাণিত জাসপাথ , এক্সপ্যাটে মডেল হওয়া ডিএসএল এবং একটি পুনরাবৃত্ত প্যাটার্নের মিলের পদ্ধতির সংমিশ্রণ ব্যবহার করে।
এখানে একটি দ্রুত উদাহরণ। নিম্নলিখিত JSON অবজেক্ট দেওয়া:
const json = {
"automobiles": [
{ "maker": "Nissan", "model": "Teana", "year": 2011 },
{ "maker": "Honda", "model": "Jazz", "year": 2010 },
{ "maker": "Honda", "model": "Civic", "year": 2007 },
{ "maker": "Toyota", "model": "Yaris", "year": 2008 },
{ "maker": "Honda", "model": "Accord", "year": 2011 }
]
};
এখানে একটি রূপান্তর:
const jsont = require('json-transforms');
const rules = [
jsont.pathRule(
'.automobiles{.maker === "Honda"}', d => ({
Honda: d.runner()
})
),
jsont.pathRule(
'.{.maker}', d => ({
model: d.match.model,
year: d.match.year
})
),
jsont.identity
];
const transformed = jsont.transform(json, rules);
নিম্নলিখিত আউটপুট:
{
"Honda": [
{ "model": "Jazz", "year": 2010 },
{ "model": "Civic", "year": 2007 },
{ "model": "Accord", "year": 2011 }
]
}
এই রূপান্তরটি তিনটি বিধি দ্বারা গঠিত। প্রথমে কোনও কোনও অটোমোবাইলের সাথে মেলে যা হন্ডা দ্বারা তৈরি করা হয়েছে, কোনও সংখ্যার সাথে কোনও বস্তু নির্গমন করে Honda
, তারপরে পুনরাবৃত্তির সাথে মিলে। দ্বিতীয় বিধিটি কোনও সংখ্যার সাথে কোনও সংখ্যার সাথে মেলে maker
, model
এবং year
বৈশিষ্ট্যগুলি আউটপুট করে । ফাইনালটি হ'ল পরিচয় রূপান্তর যা পুনরাবৃত্তভাবে মেলে।
পুরানো প্রশ্নের আরও একটি নতুন উত্তর হিসাবে, আমি DefiantJS এ একবার দেখার পরামর্শ দেব । এটি একটি XSLT নয় সমতুল্য তাদেরকে JSON জন্য, এটি হল তাদেরকে JSON জন্য XSLT। ডকুমেন্টেশনের "টেম্প্লেটিং" বিভাগে এই উদাহরণটি অন্তর্ভুক্ত রয়েছে:
<!-- Defiant template -->
<script type="defiant/xsl-template">
<xsl:template name="books_template">
<xsl:for-each select="//movie">
<xsl:value-of select="title"/><br/>
</xsl:for-each>
</xsl:template>
</script>
<script type="text/javascript">
var data = {
"movie": [
{"title": "The Usual Suspects"},
{"title": "Pulp Fiction"},
{"title": "Independence Day"}
]
},
htm = Defiant.render('books_template', data);
console.log(htm);
// The Usual Suspects<br>
// Pulp Fiction<br>
// Independence Day<br>
আমি সেখানে প্রচুর পরিমাণে জাভাস্ক্রিপ্ট টেম্প্লেটিং ইঞ্জিনগুলি এবং তাদের সমস্ত ইনলাইন এইচটিএমএল-টেম্পলেট, বিভিন্ন মার্কআপ শৈলী ইত্যাদি দেখে সত্যিই ক্লান্ত হয়ে পড়েছি এবং JSON ডেটা স্ট্রাকচারের জন্য XSLT ফর্ম্যাটিং সক্ষম করে এমন একটি ছোট লাইব্রেরি তৈরির সিদ্ধান্ত নিয়েছি । রকেট বিজ্ঞান কোনওভাবেই নয় - এটি কেবল জেএসওএনটি এক্সএমএলে বিশ্লেষণ করেছে এবং তারপরে একটি এক্সএসএলটি ডকুমেন্ট দিয়ে ফর্ম্যাট করা হয়েছে। এটি খুব দ্রুত, ক্রোমে জাভাস্ক্রিপ্ট টেম্পলেট ইঞ্জিনগুলির মতো দ্রুত নয়, তবে বেশিরভাগ অন্যান্য ব্রাউজারে এটি কমপক্ষে বৃহত্তর ডেটা স্ট্রাকচারের জন্য জেএস ইঞ্জিন বিকল্প হিসাবে তত দ্রুত।
আমি উট রুটের উমরশাল (xMLjson) -> থেকে (xlst) -> মার্শাল (এক্সএমএলজসন) ব্যবহার করছি। যথেষ্ট দক্ষ (যদিও 100% নিখুঁত নয়) তবে সহজ, যদি আপনি ইতিমধ্যে উট ব্যবহার করছেন।
এক্সএসএলটি ব্যবহার করে জেএসএন রূপান্তর করা খুব সম্ভব: আপনার জেএসওএন 2 এসএক্স ডিসরিয়ালাইজার এবং স্যাক্স 2 জসন সিরিয়ালাইজার দরকার need
জাভাতে নমুনা কোড: http://www.gerixsoft.com/blog/json/xslt4json
ইয়াট ( https://github.com/pasaran/yate ) এক্সএসএলটি-র পরে বিশেষভাবে ডিজাইন করা হয়েছে, এতে জাপাথ (জেএসের জন্য প্রাকৃতিক এক্সপথ সমতুল্য) রয়েছে, জাভাস্ক্রিপ্টে সংকলিত হয়েছে এবং উত্পাদন ব্যবহারের বেশ ইতিহাস রয়েছে। এটি ব্যবহারিকভাবে অননুমোদিত, কিন্তু নমুনা এবং পরীক্ষার মাধ্যমে পড়া যথেষ্ট হওয়া উচিত।
জেএসএলটি এক্সএসএলটির সমতুল্য একটি জেএসএন- এর খুব কাছাকাছি। এটি রূপান্তরকরণের ভাষা যেখানে আপনি জেএসএন সিনট্যাক্সে আউটপুটের নির্দিষ্ট অংশটি লেখেন, তারপরে আপনি টেমপ্লেটে সন্নিবেশ করতে চান এমন মানগুলি গণনা করতে অভিব্যক্তি সন্নিবেশ করুন।
একটি উদাহরণ:
{
"time": round(parse-time(.published, "yyyy-MM-dd'T'HH:mm:ssX") * 1000),
"device_manufacturer": .device.manufacturer,
"device_model": .device.model,
"language": .device.acceptLanguage
}
এটি জ্যাকসনের উপরে জাভাতে প্রয়োগ করা হয়েছে।
এটির প্রয়োজনীয়তা খুব বেশি নিশ্চিত নয় এবং আমার কাছে সরঞ্জামের অভাব প্রয়োজনের অভাবকে বোঝায়। জেএসওএনকে বস্তু হিসাবে সর্বোত্তমভাবে প্রক্রিয়া করা হয় (এটি যেভাবে যাইহোক জেএসে করা হয়) এবং আপনি সাধারণত রূপান্তরগুলি করতে অবজেক্টগুলির ভাষা ব্যবহার করেন (জেএসএন থেকে তৈরি জাভা অবজেক্টের জন্য জাভা, পার্ল, পাইথন, পার্ল, সি #, পিএইচপি এবং আরও চালু). কেবলমাত্র সাধারণ অ্যাসাইনমেন্ট (বা সেট, পেতে), লুপিং এবং আরও অনেক কিছু নিয়ে।
আমার অর্থ, এক্সএসএলটি হ'ল অন্য ভাষা, এবং এটির প্রয়োজনের একটি কারণ হ'ল এক্সএমএল কোনও অবজেক্ট স্বরলিপি নয় এবং সুতরাং প্রোগ্রামিং ভাষার বস্তুগুলি হুবহু ফিট হয় না (শ্রেণিবদ্ধ xML মডেল এবং অবজেক্ট / স্ট্রাক্টের মধ্যে প্রতিবন্ধকতা)।
name
এবং address
[.name, .address]
আপনি কেন মিস্টার ডেটা কভারার ব্যবহার করে জেএসএনকে এক্সএমএলে রূপান্তর করবেন না , এক্সএসএলটি ব্যবহার করে ট্রান্সফর্ম করুন এবং তারপরে আবার এটি ব্যবহার করে জেএসএনে পরিবর্তন করুন।
এক্সএসএলটি-র ম্যাচিং এক্সপ্রেশন এবং পুনরাবৃত্ত টেম্পলেটগুলির পিছনে পরিচিত এবং ঘোষণামূলক প্যাটার্ন সহ খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করার জন্য একটি কার্যক্ষম ডুডল / ধারণার প্রমাণের জন্য, দেখুন https://gist.github.com/brettz9/0e661b3093764f496e36 দেখুন
(জেএসওএন-এর জন্যও একই ধরণের পন্থা নেওয়া যেতে পারে))
নোট করুন যে ডেমোটি ফায়ারফক্সে টেমপ্লেট প্রকাশের সুবিধার জন্য জাভাস্ক্রিপ্ট ১.৮ এক্সপ্রেশন ক্লোজারের উপরও নির্ভর করে (পদ্ধতিগুলির জন্য ES6 সংক্ষিপ্ত ফর্মটি প্রয়োগ না হওয়া পর্যন্ত)।
দাবি অস্বীকার: এটি আমার নিজস্ব কোড।
আমি আমার জ্যাকসন ভিত্তিক জসন প্রসেসিং কাঠামোর জন্য একটি ডম অ্যাডাপ্টার লিখেছিলাম অনেক আগে wrote এটি nu.xom লাইব্রেরি ব্যবহার করে। ফলস্বরূপ ডোম গাছ জাভা এক্সপাথ এবং এক্সএসএলটি সুবিধার সাথে কাজ করে। আমি কিছু বাস্তবায়ন পছন্দ করেছি যা বেশ সোজা। উদাহরণস্বরূপ, রুট নোডকে সর্বদা "রুট" বলা হয়, অ্যারেগুলি একটি লি নোডে লি সাব সাব এলিমেন্টগুলির সাথে চলে (যেমন এইচটিএমএল) এবং অন্য সমস্ত কিছুই আদিম মান বা অন্য কোনও বস্তুর নোড সহ একটি উপ নোড।
ব্যবহার:
JsonObject sampleJson = sampleJson();
org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
এক্সেসএলটিতে পার্সার তৈরি করতে পার্সার জেনারেটরটি ব্যবহার করা যা জেএসওনকে পার্স করে এবং একটি এক্সএমএল আউটপুট উত্পাদন করে সেগুলির জন্য এখনও একটি পদ্ধতির দেওয়া হয়নি।
এক্সএমএল সম্মেলনে প্রচুর উল্লেখ করা একটি বিকল্প হ'ল রেক্স পার্সার জেনারেটর ( http://www.bottlecaps.de/rex/ ) - যদিও সাইটে সম্পূর্ণরূপে নথিভুক্ত, রেসিপিগুলি অনুসন্ধানে পাওয়া যায়।
জেএসএনের সাথে এক্সএসএলটি ব্যবহার করা সম্ভব হতে পারে। এক্সপাথের ভার্সন 3 (3.1) এক্সএসএলটি (3.0) এবং এক্সকুয়েরি (3.1) কোনওভাবে জেএসএনকে সমর্থন করে। এটি স্যাকসনের বাণিজ্যিক সংস্করণে উপলভ্য বলে মনে হচ্ছে এবং এক পর্যায়ে এইচ ভার্সনে অন্তর্ভুক্ত থাকতে পারে। https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
বিকল্প সমাধান থেকে আমি কী আশা করব:
আমি ডেটাগুলির সাথে একটি মিলের সেট আনতে এবং JSON বা পাঠ্য আউটপুট আনতে JSON সক্ষম করতে চাই।
যথেচ্ছ বৈশিষ্ট্যে অ্যাক্সেস করুন এবং মানগুলি মূল্যায়ন করুন
শর্তসাপেক্ষ যুক্তি জন্য সমর্থন
আমি চাই চাই যে রূপান্তর স্ক্রিপ্টগুলি সরঞ্জাম, পাঠ্য ভিত্তিক, এবং সাধারণত একটি সাধারণভাবে ব্যবহৃত ভাষা থেকে বাহ্যিক হোক।
সম্ভাব্য বিকল্প?
আমি ভাবছি যে এসকিউএল একটি উপযুক্ত বিকল্প হতে পারে যদি। https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
বিকল্প সরঞ্জামটি JSON এবং এক্সএমএল https://docs.microsoft.com/en-us/sql/relational-databases/xML/openxml-sql-server পরিচালনা করতে পারলে ভাল লাগবে
আমি এখনও এসসিএল-তে ব্যবহৃত এক্সএসএলটি স্ক্রিপ্টগুলি রূপান্তর করার চেষ্টা করি নি, বা এখনও এই বিকল্পটি পুরোপুরি মূল্যায়ন করেছি, তবে আমি আরও শীঘ্রই এটি দেখার আশা করি। এখনও কিছু চিন্তা।