Convert javascript xml strings into JSON objects, xmljson

Source: Internet
Author: User
Tags text to json

Convert javascript xml strings into JSON objects, xmljson

/* ### jQuery XML to JSON Plugin v1.2 - 2013-02-18 ### * http://www.fyneworks.com/ - diego@fyneworks.com* Licensed under http://en.wikipedia.org/wiki/MIT_License ### Website: http://www.fyneworks.com/jquery/xml-to-json/*//* # INSPIRED BY: http://www.terracoder.com/           AND: http://www.thomasfrank.se/xml_to_json.htmlAND: http://www.kawa.net/works/js/xml/objtree-e.html*//* This simple script converts XML (document of code) into a JSON object. It is the combination of 2 'xml to json' great parsers (see below) which allows for both 'simple' and 'extended' parsing modes.*/// Avoid collisions;if(window.jQuery) (function($){  // Add function to jQuery namespace $.extend({    // converts xml documents and xml text to json object  xml2json: function(xml, extended) {   if(!xml) return {}; // quick fail      //### PARSER LIBRARY   // Core function   function parseXML(node, simple){    if(!node) return null;    var txt = '', obj = null, att = null;    var nt = node.nodeType, nn = jsVar(node.localName || node.nodeName);    var nv = node.text || node.nodeValue || '';    /*DBG*/ //if(window.console) console.log(['x2j',nn,nt,nv.length+' bytes']);    if(node.childNodes){     if(node.childNodes.length>0){      /*DBG*/ //if(window.console) console.log(['x2j',nn,'CHILDREN',node.childNodes]);      $.each(node.childNodes, function(n,cn){       var cnt = cn.nodeType, cnn = jsVar(cn.localName || cn.nodeName);       var cnv = cn.text || cn.nodeValue || '';       /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>a',cnn,cnt,cnv]);       if(cnt == 8){        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>b',cnn,'COMMENT (ignore)']);        return; // ignore comment node       }       else if(cnt == 3 || cnt == 4 || !cnn){        // ignore white-space in between tags        if(cnv.match(/^\s+$/)){         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>c',cnn,'WHITE-SPACE (ignore)']);         return;        };        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>d',cnn,'TEXT']);        txt += cnv.replace(/^\s+/,'').replace(/\s+$/,'');// make sure we ditch trailing spaces from markup       }       else{        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>e',cnn,'OBJECT']);        obj = obj || {};        if(obj[cnn]){         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>f',cnn,'ARRAY']);         // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-childif(!obj[cnn].length) obj[cnn] = myArr(obj[cnn]);obj[cnn] = myArr(obj[cnn]);         obj[cnn][ obj[cnn].length ] = parseXML(cn, true/* simple */);         obj[cnn].length = obj[cnn].length;        }        else{         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>g',cnn,'dig deeper...']);         obj[cnn] = parseXML(cn);        };       };      });     };//node.childNodes.length>0    };//node.childNodes    if(node.attributes){     if(node.attributes.length>0){      /*DBG*/ //if(window.console) console.log(['x2j',nn,'ATTRIBUTES',node.attributes])      att = {}; obj = obj || {};      $.each(node.attributes, function(a,at){       var atn = jsVar(at.name), atv = at.value;       att[atn] = atv;       if(obj[atn]){        /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'ARRAY']);        // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child//if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ];        obj[cnn] = myArr(obj[cnn]);obj[atn][ obj[atn].length ] = atv;        obj[atn].length = obj[atn].length;       }       else{        /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'TEXT']);        obj[atn] = atv;       };      });      //obj['attributes'] = att;     };//node.attributes.length>0    };//node.attributes    if(obj){     obj = $.extend( (txt!='' ? new String(txt) : {}),/* {text:txt},*/ obj || {}/*, att || {}*/);     txt = (obj.text) ? (typeof(obj.text)=='object' ? obj.text : [obj.text || '']).concat([txt]) : txt;     if(txt) obj.text = txt;     txt = '';    };    var out = obj || txt;    //console.log([extended, simple, out]);    if(extended){     if(txt) out = {};//new String(out);     txt = out.text || txt || '';     if(txt) out.text = txt;     if(!simple) out = myArr(out);    };    return out;   };// parseXML   // Core Function End   // Utility functions   var jsVar = function(s){ return String(s || '').replace(/-/g,"_"); };   // NEW isNum function: 01/09/2010// Thanks to Emile Grau, GigaTecnologies S.L., www.gigatransfer.com, www.mygigamail.comfunction isNum(s){// based on utility function isNum from xml2json plugin (http://www.fyneworks.com/ - diego@fyneworks.com)// few bugs corrected from original function :// - syntax error : regexp.test(string) instead of string.test(reg)// - regexp modified to accept  comma as decimal mark (latin syntax : 25,24 )// - regexp modified to reject if no number before decimal mark  : ".7" is not accepted// - string is "trimmed", allowing to accept space at the beginning and end of stringvar regexp=/^((-)?([0-9]+)(([\.\,]{0,1})([0-9]+))?$)/return (typeof s == "number") || regexp.test(String((s && typeof s == "string") ? jQuery.trim(s) : ''));};// OLD isNum function: (for reference only)//var isNum = function(s){ return (typeof s == "number") || String((s && typeof s == "string") ? s : '').test(/^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/); };   var myArr = function(o){    // http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child//if(!o.length) o = [ o ]; o.length=o.length;    if(!$.isArray(o)) o = [ o ]; o.length=o.length;// here is where you can attach additional functionality, such as searching and sorting...    return o;   };   // Utility functions End   //### PARSER LIBRARY END      // Convert plain text to xml   if(typeof xml=='string') xml = $.text2xml(xml);      // Quick fail if not xml (or if this is a node)   if(!xml.nodeType) return;   if(xml.nodeType == 3 || xml.nodeType == 4) return xml.nodeValue;      // Find xml root node   var root = (xml.nodeType == 9) ? xml.documentElement : xml;      // Convert xml to json   var out = parseXML(root, true /* simple */);      // Clean-up memory   xml = null; root = null;      // Send output   return out;  },    // Convert text to XML DOM  text2xml: function(str) {   // NOTE: I'd like to use jQuery for this, but jQuery makes all tags uppercase   //return $(xml)[0];   var out;   try{    var xml = ((!$.support.opacity && !$.support.style))?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();    xml.async = false;   }catch(e){ throw new Error("XML Parser could not be instantiated") };   try{    if((!$.support.opacity && !$.support.style)) out = (xml.loadXML(str))?xml:false;    else out = xml.parseFromString(str, "text/xml");   }catch(e){ throw new Error("Error parsing XML string") };   return out;  } }); // extend $})(jQuery);
 
 
The jQuery library is used for writing by others. The usage is $. xml2json ()



Javascript converts xml to a json object

Parse XML using JavaScript, and then generate JSON Based on the DOM tree

JavaScript: how to convert a JSON object to a JSON string

1. Returns a string.
Var myObjectInJSON = myObject. toJSONString (); // This method is not available either.
Var jsonStr = JSON. stringify (obj );
Var jsonStr = jQuery. stringifyJSON (obj); // without this method, mislead me

2. Convert to json object
Var bToObj = JSON. parse (B );
JQuery. parseJSON (json );

Var c = '{"name": "Mike", "sex": "female", "age": "29 "}';
Var jsonObj = eval ("(" + c + ")");

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.