जावास्क्रिप्ट का उपयोग करके XML को JSON (और पीछे) में कनवर्ट करें


145

आप XML से JSON और फिर XML में कैसे परिवर्तित करेंगे?

निम्नलिखित उपकरण काफी अच्छी तरह से काम करते हैं, लेकिन पूरी तरह से सुसंगत नहीं हैं:

क्या इससे पहले किसी को इस स्थिति का सामना करना पड़ा है?


8
विसंगतियों के बारे में बताएं, कृपया
जोश स्टोडोला

4
विशेष रूप से, JSON सरणियों को XML में सिर्फ 1 तत्व के साथ बदलने के साथ करना था। जब आपने इसे 1-तत्व सरणी के बजाय JSON में परिवर्तित किया, तो इसने ऑब्जेक्ट को शाब्दिक बना दिया। मैंने $ .isArray () के साथ प्रकार की जाँच करके, और इसे सरणी में लपेटकर काम किया है यदि $! IsArray ()।
जेसन सुआरेज़

1
xml2json - fyneworks.com/jquery/xml-to-json - ५०० को १५/०२/२०१३ को तोड़ता है 14:25 AEST
ysrb

Json2xml लिंक टूट गया है।
व्हर्ल्विन

@ysrb प्लगइन उदाहरण IE8 में काम नहीं करेगा!
दोस्त

जवाबों:


103

मुझे लगता है कि यह सबसे अच्छा है: XML और JSON के बीच परिवर्तित

Xml.com O'Reilly साइट पर दिए गए लेख को पढ़ना सुनिश्चित करें , जो इन रूपांतरणों के साथ समस्याओं के विवरण में जाता है, जो मुझे लगता है कि आपको ज्ञानवर्धक लगेगा। तथ्य यह है कि ओ'रेली लेख की मेजबानी कर रहे हैं, यह इंगित करना चाहिए कि स्टीफन के समाधान में योग्यता है।


उत्तर के लिए धन्यवाद! मेरे मामले में, JSON विहित प्रतिनिधित्व है, और XML का उपयोग केवल XSLT के लिए किया जाता है .. जिसका उपयोग मेरा विचार नहीं है! :)
जेसन सुआरेज़

यह केवल ब्राउज़र में है। नोड.जेएस या गैर-ब्राउज़र वातावरण के लिए लागू नहीं होता है। कोई अन्य विचार?
होमर ६

1
@JasonDenizac को उनकी पोस्ट के बारे में टिप्पणी करने के संबंध में, मुझे यह समझ में नहीं आ रहा है कि यह लिंक एक वस्तु के बजाय एक ऑब्जेक्ट होने के मुद्दे को ठीक करने में कैसे मदद करता है ...
guiomie

1
मैंने पाया कि अगर आप json-xml-json से शुरू करते हैं, तो यह लाइब्रेरी अच्छी तरह से काम करती है, लेकिन अगर आप xml-json-xml चाहते हैं, तो
रिवर्सलिबिलिटी में

3
कृपया ध्यान दें कि यह एक कोपलाफ्ट लाइसेंस प्राप्त समाधान है। यह केवल एक विकल्प है जब आप ओपन सोर्स सॉफ्टवेयर लिख रहे हैं।
जैस्पर

48

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);

1
नमस्ते, आपने उस मुद्दे को कैसे दूर किया जहां यदि आपके पास ऑब्जेक्ट में एक वस्तु है तो यह ऑब्जेक्ट लिबरल में है, जहां अगर n> 1 ऑब्जेक्ट है, तो आपके पास एक सरणी है। यह xml का उपयोग करने के लिए टेम्प्लेट में ऑब्जेक्ट्स को json करने के लिए कठिन बनाता है ...
guiomie

हां, आपको कुछ ट्रिक का उपयोग करना चाहिए और यह XML संरचना के बारे में आपके ज्ञान पर निर्भर करता है (क्योंकि यहां कोई XSD नहीं है)। अपने नोड को हमेशा ऐरे (अनुक्रम) के रूप में एक्सेस करने के लिए <नोड> ... <नोड> _Array सिंटैक्स का उपयोग करें
abdolence

1
नमूना: // XML स्ट्रिंग से JSON var xmlText = "<MyOperation> <परीक्षण> सफलता </ परीक्षण> <test2> <आइटम> ddsfg </ आइटम> <आइटम> dsdgfdgfd / आइटम> </ test2> </ MyOperation> "; var jsonObj = X2JS.xml_str2json (xmlText); चेतावनी (jsonObj.MyOperation.test); चेतावनी (jsonObj.MyOperation.test_asArray [0]);
अपवित्र

मेरी मुख्य समस्या यह है कि जब मैं अपने json को xml में बदल देता हूँ, तो json अतिरिक्त गुणों से भर जाता है, और जब स्ट्रिंग xml संस्करण सभी बेकार सामान रख देता है। इसमें सभी तरह के अल्पविराम, और
व्हाट्सएप हैं

क्या आप अपना नमूना code.google.com/p/x2js/issues पर जमा कर सकते हैं, मैं इसकी जाँच करूँगा
पेट में जुलाब

25

इन जवाबों ने मुझे इस समारोह को बनाने में बहुत मदद की:

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 को स्टोर कर रहा था वह क्षेत्र था।


3

कुछ समय पहले मैंने अपने टीवी वॉचलिस्ट ऐप के लिए https://bitbucket.org/surenrao/xml2json इस टूल को लिखा था , आशा है कि इससे भी मदद मिलेगी।

Synopsys: एक पुस्तकालय न केवल xml को json में परिवर्तित करता है, बल्कि डीबग करना (गोलाकार त्रुटियों के बिना) और वापस json को xml में फिर से बनाना भी आसान है। विशेषताएं: - पार्स xml को json वस्तु। Json ऑब्जेक्ट को xml पर वापस प्रिंट करें। X2J ऑब्जेक्ट्स के रूप में IndexedDB में xml को बचाने के लिए इस्तेमाल किया जा सकता है। प्रिंट जेन्स ऑब्जेक्ट।


@kleopatra यह लिंक उस टूल की ओर इशारा करता है जो xml को json में परिवर्तित करता है। इसका संदर्भ नहीं, बल्कि संसाधन का वास्तविक लिंक है। निश्चित नहीं कि मुझे इसे और कैसे करना चाहिए :)
surya

2

मैं व्यक्तिगत रूप से इस उपकरण की सिफारिश करूंगा । यह 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”}}’

यहाँ एक ऑनलाइन डेमो है !


4
github repo नहीं मिली
brauliobo

1

डिस्क्लेमर: मैंने फास्ट-एक्सएमएल-पार्सर लिखा है

फास्ट 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);

: D FXP XML 2 JSON कन्वर्टर से अधिक है। कृपया इसे पढ़ें।
अमित कुमार गुप्ता

1

यहाँ 'एक अच्छी तरह से डॉक्यूमेंटेड और बहुत प्रसिद्ध npm लाइब्रेरी से एक अच्छा टूल है जो xml <-> js रूपांतरण को बहुत अच्छी तरह से करता है: उपरोक्त प्रस्तावित समाधानों के कुछ (शायद सभी) से अलग, यह xml टिप्पणियों को भी परिवर्तित करता है।

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);

1

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 पर स्रोत के साथ टेस्ट करें


0

मैं 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


0

मैंने 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;
}

प्रत्येक लूप के लिए रेगेक्स स्पष्टीकरण:

  • Res [0] - xml लौटाएँ (जैसा है)
  • Res [1] - xml टैग नाम लौटाएं
  • Res [2] - xml सामग्री लौटाएं
  • Res [3] - टैग बंद होने की स्थिति में xml टैग नाम लौटाएं। उदाहरण में:<tag />

आप देख सकते हैं कि रेगेक्स यहाँ कैसे काम करता है: https://regex101.com/r/ZJpCAL/1

नोट: मामले में json के पास अपरिभाषित मूल्य के साथ एक कुंजी है, इसे हटाया जा रहा है। इसलिए मैंने 9 लाइन के अंत में नल डाला है।


-2

क्लाइंट साइड के रूप में सर्वर साइड का उपयोग करने का सबसे अच्छा तरीका सभी परिदृश्यों में अच्छी तरह से काम नहीं करता है। मैं जावास्क्रिप्ट का उपयोग करके कनवर्टर कनवर्टर करने के लिए xml और xml को ऑनलाइन json बनाने की कोशिश कर रहा था और मुझे लगभग असंभव लग रहा था क्योंकि यह सभी परिदृश्यों में काम नहीं कर रहा था। अंतत: मैंने ASP.MVC में न्यूटनसॉफ्ट का उपयोग कर इसे सर्वर साइड कर दिया। यहाँ ऑनलाइन कनवर्टर http://techfunda.com/Tools/XmlToJson है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.