क्या JSON के लिए XSLT बराबर है? कुछ मुझे JSON पर रूपांतरण करने की अनुमति देता है जैसे कि XSLT XML को करता है।
क्या JSON के लिए XSLT बराबर है? कुछ मुझे JSON पर रूपांतरण करने की अनुमति देता है जैसे कि XSLT XML को करता है।
जवाबों:
दिलचस्प विचार। Google पर खोज करने वाले कुछ लोगों ने रुचि के कुछ पृष्ठ बनाए, जिनमें शामिल हैं:
उम्मीद है की यह मदद करेगा।
JSON के लिए XSLT समकक्ष - उम्मीदवारों की एक सूची (उपकरण और चश्मा)
आप JSON के लिए XSLT का उपयोग fn: json-to-xml के उद्देश्य से कर सकते हैं ।
यह खंड उन सुविधाओं का वर्णन करता है जो JSON डेटा को XSLT का उपयोग करके संसाधित करने की अनुमति देता है।
jq JSON डेटा के लिए sed की तरह है - आप इसे स्लाइस और फ़िल्टर और मैप करने के लिए उपयोग कर सकते हैं और संरचित डेटा को उसी आसानी से बदल सकते हैं जो sed, awk, grep और दोस्तों को आपको पाठ के साथ खेलने देता है। विभिन्न ओएस के लिए स्थापित पैकेज हैं।
JJ एक कमांड लाइन उपयोगिता है जो JSON दस्तावेज़ों से मानों को पुनः प्राप्त या अपडेट करने का तेज़ और सरल तरीका प्रदान करता है। यह GJSON और SJSON द्वारा हुड के तहत संचालित है।
कमांड लाइन JSON प्रोसेसिंग टूल
- नया वाक्यविन्यास सीखने की जरूरत नहीं है
- सादा जावास्क्रिप्ट
- स्वरूपण और प्रकाश डालना
- स्टैंडअलोन बाइनरी
jl ("JSON lambda") JSON को क्वेरी और हेरफेर करने के लिए एक छोटी कार्यात्मक भाषा है।
JSON से JSON परिवर्तन लाइब्रेरी जावा में लिखी गई है जहाँ परिवर्तन के लिए "विनिर्देशन" स्वयं एक JSON दस्तावेज़ है।
JSON को संक्षिप्त करें! ग्रोन JSON को असतत असाइनमेंट में बदल देता है ताकि आप जो चाहते हैं उसे पूरा कर सकें और इसके लिए पूर्ण 'पाथ' देख सकें। यह एपीआई की खोज को आसान बनाता है जो JSON के बड़े ब्लब्स को लौटाता है लेकिन भयानक प्रलेखन है।
JSON JSON के साथ काम करने के लिए एक तेज CLI उपकरण है। यह एक एकल फ़ाइल नोड है। कोई बाहरी डिपो (नोड के अलावा अन्य) के साथ स्क्रिप्ट।
JSON-e, JSON ऑब्जेक्ट्स में संदर्भ एम्बेड करने के लिए डेटा-स्ट्रक्चर पैरामीटरेशन सिस्टम है। केंद्रीय विचार एक डेटा संरचना को "टेम्पलेट" के रूप में माना जाता है और इसे आउटपुट डेटा संरचना का उत्पादन करने के लिए संदर्भ के रूप में किसी अन्य डेटा संरचना का उपयोग करके परिवर्तित करना है।
JSLT JSON की संपूर्ण क्वेरी और परिवर्तन भाषा है। भाषा डिजाइन jq, XPath और XQuery से प्रेरित है।
JSONata JSON डेटा के लिए एक हल्की क्वेरी और परिवर्तन भाषा है। XPath 3.1 के 'स्थान पथ' शब्दार्थ से प्रेरित होकर, यह परिष्कृत प्रश्नों को एक कॉम्पैक्ट और सहज ज्ञान युक्त अंकन में व्यक्त करने की अनुमति देता है।
JSON डेटा को बदलने के लिए एक पुनरावर्ती, पैटर्न-मिलान दृष्टिकोण प्रदान करता है। ट्रांसफ़ॉर्मेशन को नियमों के एक सेट के रूप में परिभाषित किया जाता है जो JSON ऑब्जेक्ट की संरचना से मेल खाते हैं। जब कोई मैच होता है, तो नियम रूपांतरित डेटा का उत्सर्जन करता है, वैकल्पिक रूप से बाल वस्तुओं को बदलने के लिए।
Jsawk awk की तरह है, लेकिन JSON के लिए। आप स्टड से पढ़ी गई JSON ऑब्जेक्ट्स की एक सरणी के साथ काम करते हैं, उन्हें परिणाम को सरणी करने के लिए जावास्क्रिप्ट का उपयोग करके फ़िल्टर करें जो कि stdout में मुद्रित होता है।
टेस्ट का उपयोग https://github.com/pasaran/yate/tree/master/tests के रूप में किया जा सकता है
JSONPath का उपयोग करके किसी ऑब्जेक्ट शाब्दिक से डेटा खींचता है और एक टेम्पलेट पर आधारित एक नई वस्तु उत्पन्न करता है।
स्टेपलिंग एक जावास्क्रिप्ट लाइब्रेरी है जो JSON ऑब्जेक्ट्स के लिए XSLT फॉर्मेटिंग को सक्षम करता है। जावास्क्रिप्ट टेम्प्लेटिंग इंजन और टेक्स्ट / html टेम्प्लेट का उपयोग करने के बजाय, स्टेपलिंग आपको अपने JSON डेटा स्रोतों को पार्स करने के लिए XSLT टेम्प्लेट का उपयोग करने का अवसर देता है - अजाक्स के साथ अतुल्यकालिक रूप से लोड किया गया और फिर क्लाइंट साइड कैश किया गया।
JSON पॉइंटर एक जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) दस्तावेज़ के भीतर एक विशिष्ट मूल्य की पहचान करने के लिए एक स्ट्रिंग सिंटैक्स को परिभाषित करता है।
JSONPath भाव हमेशा एक JSON संरचना को उसी तरह से संदर्भित करते हैं जैसे कि XMLath अभिव्यक्ति एक्सएमएल दस्तावेज़ के साथ संयोजन में उपयोग की जाती है
JSON के लिए JSPath XML के लिए XPath जैसा है। "
JSONiq के पीछे प्रेरणा का मुख्य स्रोत XQuery है, जो अर्ध-संरचित डेटा के लिए अब तक एक सफल और उत्पादक क्वेरी भाषा साबित हुई है
JOLT का प्रयास करें । यह जावा में लिखी जाने वाली JSON परिवर्तन लाइब्रेरी का JSON है।
यह विशेष रूप से बनाया गया था क्योंकि हम "JSON -> XML -> XSLT -> XML -> JSON" गेम नहीं खेलना चाहते थे, और किसी भी पर्याप्त जटिल परिवर्तन के लिए टेम्पलेट का उपयोग करना अकल्पनीय है।
jq - हल्का और लचीला कमांड-लाइन JSON प्रोसेसर
यह XSLT की तरह टेम्पलेट-आधारित नहीं है, लेकिन अधिक संक्षिप्त है। सरणी में फ़ील्ड name
और address
फ़ील्ड निकालना :[.name, .address]
ट्यूटोरियल ट्विटर के JSON एपीआई बदलने का एक उदाहरण के माध्यम से चलता है (और मैनुअल कई उदाहरण है)।
.. | .attr_name?
तुम क्या देख रहे हो? ( stedolan.github.io/jq/manual/#RecursiveDescent से .. )
XSLT JSON का समर्थन करता है जैसा कि http://www.w3.org/TR/xslt-30/#json पर देखा गया है
XML सीमांकक टोकनों के लिए कोणीय कोष्ठक का उपयोग करता है, JSON ब्रेसिज़, वर्ग कोष्ठक का उपयोग करता है, ... I e। XML की कम टोकन मान्यता तुलनाओं का अर्थ है कि यह घोषणात्मक परिवर्तन के लिए अनुकूलित है, जबकि अधिक तुलना, स्विच स्टेटमेंट की तरह, गति कारणों से सट्टा शाखा की भविष्यवाणी मानती है कि स्क्रिप्टिंग भाषाओं में अनिवार्य कोड के लिए उपयोगी है। प्रत्यक्ष परिणाम के रूप में, अर्ध-संरचित डेटा के विभिन्न मिश्रणों के लिए, आप उत्तरदायी पृष्ठों के हिस्से के रूप में XSLT और जावास्क्रिप्ट इंजन के प्रदर्शन को बेंचमार्क करना चाह सकते हैं। नगण्य डेटा पेलोड के लिए, रूपांतरण बिना XML क्रमांकन के JSON के साथ भी काम कर सकता है। W3 का निर्णय बेहतर विश्लेषण पर आधारित होना चाहिए।
मुझे हाल ही में एक टूल मिला है जो मुझे JSON स्टाइल करने के लिए पसंद है: https://github.com/twigkit/tempo । उपयोग करने के लिए बहुत आसान उपकरण - मेरी राय में, XSLT की तुलना में काम करना बहुत आसान है - XPATH प्रश्नों की कोई आवश्यकता नहीं है।
Jsonpath- वस्तु-परिवर्तन पर एक नज़र है
कहने के लिए उपकरणों की कमी की आवश्यकता की कमी का सुझाव सिर्फ सवाल भीख माँग रहा है। लिनक्स में एक्स या वाई के लिए समर्थन करने के लिए आवेदन किया जा सकता है (ऐसे अल्पसंख्यक ओएस के लिए गुणवत्ता ड्राइवर और / या गेम को क्यों परेशान करें? और क्यों एक ओएस पर ध्यान दें कि बड़े गेम और हार्डवेयर कंपनियां विकसित नहीं होती हैं?)। संभवतः जिन लोगों को XSLT और JSON का उपयोग करने की आवश्यकता होगी, वे कुछ हद तक मामूली वर्कअराउंड का उपयोग कर रहे हैं: JSON को XML में बदलना। लेकिन यह इष्टतम समाधान नहीं है, क्या यह है?
जब आपके पास एक देशी JSON प्रारूप होता है और आप इसे ब्राउज़र में "wysywyg" संपादित करना चाहते हैं, तो XSLT समस्या के लिए पर्याप्त समाधान से अधिक होगा। पारंपरिक जावास्क्रिप्ट प्रोग्रामिंग के साथ ऐसा करने से गधे में दर्द हो सकता है।
वास्तव में, मैंने XSLT के लिए एक "पत्थर-आयु" दृष्टिकोण को लागू किया है, जावास्क्रिप्ट का उपयोग करने के लिए कुछ बुनियादी आदेशों की व्याख्या करने के लिए पार्सिंग का उपयोग करके, जैसे कि एक टेम्पलेट को कॉल करना, बच्चों को प्रक्रिया करना, आदि। निश्चित रूप से JSON ऑब्जेक्ट के साथ एक परिवर्तन इंजन को लागू करना बहुत आसान है। XSLT पार्स करने के लिए एक पूर्ण XML XML पार्सर लागू करना। समस्या यह है, कि JSON ऑब्जेक्ट को बदलने के लिए XML टेम्प्लेट का उपयोग करने के लिए आपको टेम्प्लेट के XML को पार्स करने की आवश्यकता होती है।
XML (या HTML, या पाठ या जो कुछ भी) के साथ एक JSON ऑब्जेक्ट को ट्रांसफॉर्म करने के लिए आपको सिंटैक्स के बारे में सावधानी से सोचने की जरूरत है और परिवर्तन कमांड की पहचान करने के लिए आपको कौन से विशेष वर्णों का उपयोग करने की आवश्यकता है। अन्यथा आप अपनी स्वयं की कस्टम टेंपलेटिंग भाषा के लिए एक पार्सर डिजाइन करने का प्रयास करेंगे। उस रास्ते से चलने के बाद, मैं आपको बता सकता हूं कि यह सुंदर नहीं है।
अद्यतन (12 नवंबर, 2010): मेरे पार्सर पर काम करने के कुछ हफ़्ते बाद, मैं इसे अनुकूलित करने में सक्षम रहा हूं। टेम्पलेट पहले से पार्स किए जाते हैं और कमांड को JSON ऑब्जेक्ट्स के रूप में संग्रहीत किया जाता है। परिवर्तन नियम भी JSON ऑब्जेक्ट हैं, जबकि टेम्प्लेट कोड HTML का मिश्रण है और शेल कोड के समान होमब्रेव सिंटैक्स है। डॉक्यूमेंट एडिटर बनाने के लिए मैं एक जटिल JSON डॉक्यूमेंट को HTML में बदलने में सक्षम रहा हूं। कोड संपादक के लिए 1K लाइनों के आसपास है (यह एक निजी परियोजना के लिए है, इसलिए मैं इसे साझा नहीं कर सकता) और JSON परिवर्तन कोड के लिए लगभग 990 लाइनें (पुनरावृति आदेश, सरल तुलना, टेम्पलेट कॉलिंग, चर बचत और मूल्यांकन शामिल है)। मेरी योजना इसे एमआईटी लाइसेंस के तहत जारी करने की है। यदि आप शामिल होना चाहते हैं तो मुझे एक मेल ड्रॉप करें।
मैंने हाल ही में इसके इर्द-गिर्द अपनी एक छोटी सी लाइब्रेरी लिखी है, जो करीब रहने की कोशिश करती है
5.1 प्रोसेसिंग मॉडल (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
जावास्क्रिप्ट कोड की कुछ पंक्तियों में (जैसा कि वैसे भी मैं कर सकता था) संभव है।
यहाँ कुछ नहीं पूरी तरह से उपयोग के तुच्छ उदाहरण हैं ...
फिडल: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
( D.1 दस्तावेज़ उदाहरण (XSLT REC) से प्रेरित होकर https://www.w3.org/TR/xslt#section-Docuy-Example )
यह कहां:
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)"
}
]
}
}
}
एक जावास्क्रिप्ट के बराबर ...
XSLT 3.0 REC धारा 14.4 उदाहरण: सामान्य मानों के आधार पर समूहीकरण नोड्स
(at: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
सी एफ 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>
एक जावास्क्रिप्ट के बराबर ...
JSONiq का उपयोग करें मामले 1.1.2 धारा। JSON के लिए समूहीकरण समूह
(at: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
सी एफ 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 wrt की सीमाओं को दूर करने के लिए भी उपयोगी है। पूर्वज अक्ष के विरुद्ध क्वेरी करना, जैसा कि इस SO प्रश्न (और निश्चित रूप से अन्य) द्वारा उठाया गया है ।
उदाहरण के लिए, किसी किराने की वस्तु की छूट कैसे प्राप्त करें, इसकी ब्रांड आईडी, में जाने
{
"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
यह JSPath के संयोजन का उपयोग करता है , XPath पर एक डीएसएल मॉडल, और एक पुनरावर्ती पैटर्न मिलान दृष्टिकोण, जो सीधे XSLT द्वारा प्रेरित है।
यहाँ एक त्वरित उदाहरण है। निम्नलिखित 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>
मैं वास्तव में जावास्क्रिप्ट टेंपलेटिंग इंजनों की भारी मात्रा में थक गया हूं, और उनके सभी इनलाइन एचटीएमएल-टेम्प्लेट, अलग-अलग मार्कअप स्टाइल इत्यादि, और एक छोटी सी लाइब्रेरी बनाने का फैसला किया है जो जेएसएन डेटा संरचनाओं के लिए XSLT प्रारूपण को सक्षम बनाता है। किसी भी तरह से रॉकेट साइंस नहीं - यह सिर्फ JSON XML में पार्स किया गया और फिर XSLT दस्तावेज़ के साथ स्वरूपित किया गया। यह क्रोम में जावास्क्रिप्ट टेम्प्लेट इंजन के रूप में भी तेज़ नहीं है, लेकिन अधिकांश अन्य ब्राउज़रों में यह कम से कम उतना ही तेज़ है जितना कि अन्य डेटा संरचनाओं के लिए जेएस इंजन विकल्प।
मैं ऊंट मार्ग उमरशल (xmljson) -> से (xlst) -> मार्शल (xmljson) का उपयोग कर रहा हूं। पर्याप्त पर्याप्त (हालांकि 100% सही नहीं), लेकिन सरल, यदि आप पहले से ही कैमल का उपयोग कर रहे हैं।
XSLT का उपयोग करके JSON को रूपांतरित करना बहुत संभव है: आपको JSON2SAX डेज़राइज़र और SAX2JSON सीरीज़र की आवश्यकता है।
जावा में नमूना कोड: http://www.gerixsoft.com/blog/json/xslt4json
Yate ( https://github.com/pasaran/yate ) को विशेष रूप से XSLT के बाद डिज़ाइन किया गया है, JPath (JS के लिए एक प्राकृतिक XPath समतुल्य) की विशेषता है, जावास्क्रिप्ट का संकलन करता है और उत्पादन के उपयोग का काफी इतिहास रखता है। यह व्यावहारिक रूप से अनिर्दिष्ट है, लेकिन नमूनों और परीक्षणों के माध्यम से पढ़ना पर्याप्त होना चाहिए।
JSLT , XSLT के बराबर JSON के बहुत करीब है। यह एक रूपांतरित भाषा है जहाँ आप JSON सिंटैक्स में आउटपुट के निश्चित भाग को लिखते हैं, फिर टेम्पलेट में सम्मिलित किए जाने वाले मानों की गणना करने के लिए अभिव्यक्तियाँ सम्मिलित करते हैं।
एक उदाहरण:
{
"time": round(parse-time(.published, "yyyy-MM-dd'T'HH:mm:ssX") * 1000),
"device_manufacturer": .device.manufacturer,
"device_model": .device.model,
"language": .device.acceptLanguage
}
यह जैक्सन के शीर्ष पर जावा में लागू किया गया है।
यह भी सुनिश्चित नहीं है कि इसके लिए आवश्यकता है, और मेरे लिए उपकरणों की कमी की आवश्यकता का अभाव है। JSON को ऑब्जेक्ट्स के रूप में सबसे अच्छा संसाधित किया जाता है (वैसे भी जेएस में यह किया जाता है), और आप आम तौर पर ट्रांसफ़ॉर्मेशन करने के लिए ऑब्जेक्ट्स की भाषा का उपयोग करते हैं (JSON से बनाए गए जावा ऑब्जेक्ट्स के लिए, Perl, Python, Perl, c #, PHP के लिए समान है) और पर)। बस सामान्य असाइनमेंट (या सेट करें, प्राप्त करें), लूपिंग और इसी तरह।
मेरा मतलब है, XSLT सिर्फ एक और भाषा है, और इसकी एक वजह यह है कि XML एक ऑब्जेक्ट नोटेशन नहीं है और इस प्रकार प्रोग्रामिंग भाषाओं की वस्तुएं सटीक रूप से फिट नहीं होती हैं (पदानुक्रम xml मॉडल और ऑब्जेक्ट्स / स्ट्रक्चर के बीच प्रतिबाधा)।
name
और address
, और उन्हें एक सरणी में रखने के लिए जैसे :[.name, .address]
आप मिस्टर डेटा कवरर का उपयोग करके JSON को XML में कनवर्ट क्यों नहीं करते हैं , XSLT का उपयोग करके इसे ट्रांसफॉर्म करें और फिर उसी का उपयोग करके इसे वापस JSON में बदल दें।
XSLT की मिलान अभिव्यक्तियों और पुनरावर्ती टेम्पलेट्स के पीछे परिचित और घोषणात्मक पैटर्न के साथ-साथ शुद्ध जावास्क्रिप्ट का उपयोग करने के लिए एक दृष्टिकोण की अवधारणा के काम करने के सिद्धांत के लिए, https://gist.github.com/brettz9/0e661bb93764f496e36 देखें
(JSON के लिए एक समान दृष्टिकोण लिया जा सकता है।)
ध्यान दें कि डेमो भी फ़ायरफ़ॉक्स में टेम्पलेट की सुविधा के लिए जावास्क्रिप्ट 1.8 अभिव्यक्ति पर निर्भर करता है (कम से कम तब तक जब तक ईएस 6 शॉर्ट फॉर्म लागू नहीं किया जा सकता है)।
अस्वीकरण: यह मेरा अपना कोड है।
मैंने बहुत समय पहले अपने जैकसन आधारित जसन प्रसंस्करण ढांचे के लिए एक डोम एडेप्टर लिखा था। यह nu.xom लाइब्रेरी का उपयोग करता है। परिणामी डोम ट्री जावा xpath और xslt सुविधाओं के साथ काम करता है। मैंने कुछ कार्यान्वयन विकल्प बनाए जो बहुत सीधे हैं। उदाहरण के लिए रूट नोड को हमेशा "रूट" कहा जाता है, सरणियाँ एक उप नोड में ली उप तत्वों (जैसे html) के साथ जाती हैं, और बाकी सब सिर्फ एक उप नोड है जो एक आदिम मान या किसी अन्य ऑब्जेक्ट नोड के साथ है।
उपयोग:
JsonObject sampleJson = sampleJson();
org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
अभी तक नहीं दिया गया एक दृष्टिकोण XSLT में एक पार्सर बनाने के लिए एक पार्सर जनरेटर का उपयोग करना है जो JSON को पार्स करता है और एक XML आउटपुट पैदा करता है।
एक विकल्प जो एक्सएमएल सम्मेलनों में बहुत अधिक उल्लेख किया जाता है वह है रेक्स पार्सर जनरेटर ( http://www.bottlecaps.de/rex/ ) - हालांकि साइट पर पूरी तरह से अनिर्दिष्ट है , खोज पर व्यंजन उपलब्ध हैं।
JSON के साथ XSLT का उपयोग करना संभव हो सकता है। XPath (3.1) XSLT (3.0) और XQuery (3.1) के वेरसन 3 किसी तरह से JSON का समर्थन करते हैं। यह सैक्सन के व्यावसायिक संस्करण में उपलब्ध लगता है, और कुछ बिंदु पर HE संस्करण में शामिल किया जा सकता है। https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
मैं वैकल्पिक समाधान से क्या उम्मीद करूंगा:
मैं डेटा का एक मिलान सेट लाने के लिए JSON इनपुट करने में सक्षम होना चाहता हूं, और JSON या TEXT आउटपुट करता हूं।
मनमाने गुणों तक पहुँचें और मूल्यों का मूल्यांकन करें
सशर्त तर्क के लिए समर्थन
मैं रूपांतरण लिपियों को उपकरण से बाहरी होना चाहता हूं, पाठ आधारित, और अधिमानतः इस्तेमाल की जाने वाली भाषा।
संभावित विकल्प?
मुझे आश्चर्य है कि अगर एसक्यूएल एक उपयुक्त विकल्प हो सकता है। https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
अच्छा होगा यदि वैकल्पिक उपकरण JSON और XML https://docs.microsoft.com/en-us/sql/relational-dat डेटाबेस / xml / openxml-sql-server को संभाल सके
मैंने अभी तक XSLT लिपियों को SQL में उपयोग करने की कोशिश नहीं की है, या इस विकल्प का पूरी तरह से मूल्यांकन अभी तक किया है, लेकिन मुझे उम्मीद है कि इस पर जल्द ही गौर किया जाएगा। अभी तक सिर्फ कुछ विचार।