आप XML से JSON और फिर XML में कैसे परिवर्तित करेंगे?
निम्नलिखित उपकरण काफी अच्छी तरह से काम करते हैं, लेकिन पूरी तरह से सुसंगत नहीं हैं:
क्या इससे पहले किसी को इस स्थिति का सामना करना पड़ा है?
आप XML से JSON और फिर XML में कैसे परिवर्तित करेंगे?
निम्नलिखित उपकरण काफी अच्छी तरह से काम करते हैं, लेकिन पूरी तरह से सुसंगत नहीं हैं:
क्या इससे पहले किसी को इस स्थिति का सामना करना पड़ा है?
जवाबों:
मुझे लगता है कि यह सबसे अच्छा है: XML और JSON के बीच परिवर्तित
Xml.com O'Reilly साइट पर दिए गए लेख को पढ़ना सुनिश्चित करें , जो इन रूपांतरणों के साथ समस्याओं के विवरण में जाता है, जो मुझे लगता है कि आपको ज्ञानवर्धक लगेगा। तथ्य यह है कि ओ'रेली लेख की मेजबानी कर रहे हैं, यह इंगित करना चाहिए कि स्टीफन के समाधान में योग्यता है।
https://github.com/abdmob/x2js - मेरी अपनी लाइब्रेरी ( http://code.google.com/p/x2js/ से अपडेट किया गया URL ):
यह लाइब्रेरी XML को JSON (जावास्क्रिप्ट ऑब्जेक्ट्स) और इसके विपरीत जावास्क्रिप्ट रूपांतरण फ़ंक्शन प्रदान करती है। पुस्तकालय बहुत छोटा है और किसी अन्य अतिरिक्त पुस्तकालय की आवश्यकता नहीं है।
एपीआई कार्य करता है
- नई X2JS () - सभी लाइब्रेरी कार्यक्षमता तक पहुंचने के लिए अपना उदाहरण बनाने के लिए। इसके अलावा, आप यहां वैकल्पिक कॉन्फ़िगरेशन विकल्प निर्दिष्ट कर सकते हैं
- X2JS.xml2json - XML को JSON के DOM ऑब्जेक्ट के रूप में निर्दिष्ट करें
- X2JS.json2xml - JSON को XML DOM ऑब्जेक्ट में कनवर्ट करें
- X2JS.xml_str2json - XML को JSON के स्ट्रिंग के रूप में निर्दिष्ट करें
- X2JS.json2xml_str - JSON को XML स्ट्रिंग में बदलें
Http://jsfiddle.net/abdmob/gkxucxrj/1/ पर ऑनलाइन डेमो
var x2js = new X2JS();
function convertXml2JSon() {
$("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val())));
}
function convertJSon2XML() {
$("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val())));
}
convertXml2JSon();
convertJSon2XML();
$("#convertToJsonBtn").click(convertXml2JSon);
$("#convertToXmlBtn").click(convertJSon2XML);
इन जवाबों ने मुझे इस समारोह को बनाने में बहुत मदद की:
function xml2json(xml) {
try {
var obj = {};
if (xml.children.length > 0) {
for (var i = 0; i < xml.children.length; i++) {
var item = xml.children.item(i);
var nodeName = item.nodeName;
if (typeof (obj[nodeName]) == "undefined") {
obj[nodeName] = xml2json(item);
} else {
if (typeof (obj[nodeName].push) == "undefined") {
var old = obj[nodeName];
obj[nodeName] = [];
obj[nodeName].push(old);
}
obj[nodeName].push(xml2json(item));
}
}
} else {
obj = xml.textContent;
}
return obj;
} catch (e) {
console.log(e.message);
}
}
जब तक आप एक jquery डोम / xml ऑब्जेक्ट में पास होते हैं: मेरे लिए यह था:
Jquery(this).find('content').eq(0)[0]
वह सामग्री जहां मैं अपने xml को स्टोर कर रहा था वह क्षेत्र था।
कुछ समय पहले मैंने अपने टीवी वॉचलिस्ट ऐप के लिए https://bitbucket.org/surenrao/xml2json इस टूल को लिखा था , आशा है कि इससे भी मदद मिलेगी।
Synopsys: एक पुस्तकालय न केवल xml को json में परिवर्तित करता है, बल्कि डीबग करना (गोलाकार त्रुटियों के बिना) और वापस json को xml में फिर से बनाना भी आसान है। विशेषताएं: - पार्स xml को json वस्तु। Json ऑब्जेक्ट को xml पर वापस प्रिंट करें। X2J ऑब्जेक्ट्स के रूप में IndexedDB में xml को बचाने के लिए इस्तेमाल किया जा सकता है। प्रिंट जेन्स ऑब्जेक्ट।
मैं व्यक्तिगत रूप से इस उपकरण की सिफारिश करूंगा । यह JSON कनवर्टर के लिए एक XML है।
यह बहुत हल्का है और शुद्ध जावास्क्रिप्ट में है। इसे कोई निर्भरता नहीं चाहिए। आप बस अपने कोड में फ़ंक्शन जोड़ सकते हैं और अपनी इच्छानुसार इसका उपयोग कर सकते हैं।
यह XML विशेषताओं को भी ध्यान में रखता है।
var xml = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml);
console.log(json);
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’
यहाँ एक ऑनलाइन डेमो है !
डिस्क्लेमर: मैंने फास्ट-एक्सएमएल-पार्सर लिखा है
फास्ट XML पार्सर XML को JSON में बदलने और इसके विपरीत में मदद कर सकता है। यहाँ उदाहरण है;
var options = {
attributeNamePrefix : "@_",
attrNodeName: "attr", //default is 'false'
textNodeName : "#text",
ignoreAttributes : true,
ignoreNameSpace : false,
allowBooleanAttributes : false,
parseNodeValue : true,
parseAttributeValue : false,
trimValues: true,
decodeHTMLchar: false,
cdataTagName: "__cdata", //default is 'false'
cdataPositionChar: "\\c",
};
if(parser.validate(xmlData)=== true){//optional
var jsonObj = parser.parse(xmlData,options);
}
यदि आप XML में JSON या JS ऑब्जेक्ट पार्स करना चाहते हैं तो
//default options need not to set
var defaultOptions = {
attributeNamePrefix : "@_",
attrNodeName: "@", //default is false
textNodeName : "#text",
ignoreAttributes : true,
encodeHTMLchar: false,
cdataTagName: "__cdata", //default is false
cdataPositionChar: "\\c",
format: false,
indentBy: " ",
supressEmptyNode: false
};
var parser = new parser.j2xParser(defaultOptions);
var xml = parser.parse(json_or_js_obj);
यहाँ 'एक अच्छी तरह से डॉक्यूमेंटेड और बहुत प्रसिद्ध npm लाइब्रेरी से एक अच्छा टूल है जो xml <-> js रूपांतरण को बहुत अच्छी तरह से करता है: उपरोक्त प्रस्तावित समाधानों के कुछ (शायद सभी) से अलग, यह xml टिप्पणियों को भी परिवर्तित करता है।
var obj = {name: "Super", Surname: "Man", age: 23};
var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
6 सरल ES6 लाइनों में:
xml2json = xml => {
var el = xml.nodeType === 9 ? xml.documentElement : xml
var h = {name: el.nodeName}
h.content = Array.from(el.childNodes || []).filter(e => e.nodeType === 3).map(e => e.textContent).join('').trim()
h.attributes = Array.from(el.attributes || []).filter(a => a).reduce((h, a) => { h[a.name] = a.value; return h }, {})
h.children = Array.from(el.childNodes || []).filter(e => e.nodeType === 1).map(c => h[c.nodeName] = xml2json(c))
return h
}
Https://github.com/brauliobo/biochemical-db/blob/master/lib/xml2json.es6echo "xml2json_example()" | node -r xml2json.es6
पर स्रोत के साथ टेस्ट करें
मैं xml का एकल मान प्राप्त करने के लिए xmlToJson का उपयोग कर रहा था।
मैंने पाया कि निम्नलिखित करना बहुत आसान है (यदि xml केवल एक बार होता है ..)
let xml =
'<person>' +
' <id>762384324</id>' +
' <firstname>Hank</firstname> ' +
' <lastname>Stone</lastname>' +
'</person>';
let getXmlValue = function(str, key) {
return str.substring(
str.lastIndexOf('<' + key + '>') + ('<' + key + '>').length,
str.lastIndexOf('</' + key + '>')
);
}
alert(getXmlValue(xml, 'firstname')); // gives back Hank
मैंने regex के आधार पर एक पुनरावर्ती कार्य बनाया है, यदि आप पुस्तकालय स्थापित नहीं करना चाहते हैं और जो हो रहा है उसके पीछे के तर्क को समझें:
const xmlSample = '<tag>tag content</tag><tag2>another content</tag2><tag3><insideTag>inside content</insideTag><emptyTag /></tag3>';
console.log(parseXmlToJson(xmlSample));
function parseXmlToJson(xml) {
const json = {};
for (const res of xml.matchAll(/(?:<(\w*)(?:\s[^>]*)*>)((?:(?!<\1).)*)(?:<\/\1>)|<(\w*)(?:\s*)*\/>/gm)) {
const key = res[1] || res[3];
const value = res[2] && parseXmlToJson(res[2]);
json[key] = ((value && Object.keys(value).length) ? value : res[2]) || null;
}
return json;
}
प्रत्येक लूप के लिए रेगेक्स स्पष्टीकरण:
<tag />
आप देख सकते हैं कि रेगेक्स यहाँ कैसे काम करता है: https://regex101.com/r/ZJpCAL/1
नोट: मामले में json के पास अपरिभाषित मूल्य के साथ एक कुंजी है, इसे हटाया जा रहा है। इसलिए मैंने 9 लाइन के अंत में नल डाला है।
क्लाइंट साइड के रूप में सर्वर साइड का उपयोग करने का सबसे अच्छा तरीका सभी परिदृश्यों में अच्छी तरह से काम नहीं करता है। मैं जावास्क्रिप्ट का उपयोग करके कनवर्टर कनवर्टर करने के लिए xml और xml को ऑनलाइन json बनाने की कोशिश कर रहा था और मुझे लगभग असंभव लग रहा था क्योंकि यह सभी परिदृश्यों में काम नहीं कर रहा था। अंतत: मैंने ASP.MVC में न्यूटनसॉफ्ट का उपयोग कर इसे सर्वर साइड कर दिया। यहाँ ऑनलाइन कनवर्टर http://techfunda.com/Tools/XmlToJson है