`

XML转换成JSON

    博客分类:
  • Java
阅读更多
XML转换成JSONJavaScript 2007-12-29 21:03:56 阅读243 评论0 字号:大中小
       在使用Ajax的时候,通常是将数据以XML的格式返回客户端,然后使用Javascript解析DOM结构。但W3C自带的方法和属性在操作的时候不是很方便。从网上找到一个SoftXMLLib.js,提供了使用XPATH访问节点的方式。对于复杂结构的XML是比较合适的。处理一般的XML,有一个xml2json.js,将XML转换成JSON后,访问节点的时候格式很简单。

/* 
http://www.thomasfrank.se/xml_to_json.html
xml2json v 1.1 
copyright 2005-2007 Thomas Frank
// 简单调用 - myXML是XML格式的字符串:
myJsonObject=xml2json.parser(myXML);

// 第二个参数可选, 代表 "不进行转换的tags" ,本例中为<b>和<i>:
myJsonObject=xml2json.parser(myXML,'b,i');

// 第三个参数可选,表明希望返回一个 JSON structure 的字符串,而不是JSON object:
myString=xml2json.parser(myXML,'','html');
// - 使用 "compact" 可以在输出时去掉换行或tabbing
// -  使用 "normal" 则包含换行或tabbing
// -  使用 "html"   以html格式
例如
str="<animals>
     <dog>
          <name>Rufus</name>
          <breed>labrador</breed>
     </dog>
     <dog>
          <name>Marty</name>
          <breed>whippet</breed>
     </dog>
     <cat name="Matilda"/>
</animals>"

myJsonObject=xml2json.parser(str);
alert(myJsonObject.animals.dog[0].name)
*/

xml2json={
    parser:function(xmlcode,ignoretags,debug){
        if(!ignoretags){ignoretags=""};
        xmlcode=xmlcode.replace(/\s*\/>/g,'/>');
        xmlcode=xmlcode.replace(/<\?[^>]*>/g,"").replace(/<\![^>]*>/g,"");
        if (!ignoretags.sort){ignoretags=ignoretags.split(",")};
        var x=this.no_fast_endings(xmlcode);
        x=this.attris_to_tags(x);
        x=escape(x);
        x=x.split("%3C").join("<").split("%3E").join(">").split("%3D").join("=").split("%22").join("\"");
        for (var i=0;i<ignoretags.length;i++){
            x=x.replace(new RegExp("<"+ignoretags[i]+">","g"),"*$**"+ignoretags[i]+"**$*");
            x=x.replace(new RegExp("</"+ignoretags[i]+">","g"),"*$***"+ignoretags[i]+"**$*")
        };
        x='<JSONTAGWRAPPER>'+x+'</JSONTAGWRAPPER>';
        this.xmlobject={};
        var y=this.xml_to_object(x).jsontagwrapper;
        if(debug){y=this.show_json_structure(y,debug)};
        return y
    },
    xml_to_object:function(xmlcode){
        var x=xmlcode.replace(/<\//g,"?);
        x=x.split("<");
        var y=[];
        var level=0;
        var opentags=[];
        for (var i=1;i<x.length;i++){
            var tagname=x[i].split(">")[0];
            opentags.push(tagname);
            level++
            y.push(level+"<"+x[i].split("?)[0]);
            while(x[i].indexOf("?+opentags[opentags.length-1]+">")>=0){level--;opentags.pop()}
        };
        var oldniva=-1;
        var objname="this.xmlobject";
        for (var i=0;i<y.length;i++){
            var preeval="";
            var niva=y[i].split("<")[0];
            var tagnamn=y[i].split("<")[1].split(">")[0];
            tagnamn=tagnamn.toLowerCase();
            var rest=y[i].split(">")[1];
            if(niva<=oldniva){
                var tabort=oldniva-niva+1;
                for (var j=0;j<tabort;j++){objname=objname.substring(0,objname.lastIndexOf("."))}
            };
            objname+="."+tagnamn;
            var pobject=objname.substring(0,objname.lastIndexOf("."));
            if (eval("typeof "+pobject) != "object"){preeval+=pobject+"={value:"+pobject+"};\n"};
            var objlast=objname.substring(objname.lastIndexOf(".")+1);
            var already=false;
            for (k in eval(pobject)){if(k==objlast){already=true}};
            var onlywhites=true;
            for(var s=0;s<rest.length;s+=3){
                if(rest.charAt(s)!="%"){onlywhites=false}
            };
            if (rest!="" && !onlywhites){
                if(rest/1!=rest){
                    rest="'"+rest.replace(/\'/g,"\\'")+"'";
                    rest=rest.replace(/\*\$\*\*\*/g,"</");
                    rest=rest.replace(/\*\$\*\*/g,"<");
                    rest=rest.replace(/\*\*\$\*/g,">")
                }
            }
            else {rest="{}"};
            if(rest.charAt(0)=="'"){rest='unescape('+rest+')'};
            if (already && !eval(objname+".sort")){preeval+=objname+"=["+objname+"];\n"};
            var before="=";after="";
            if (already){before=".push(";after=")"};
            var toeval=preeval+objname+before+rest+after;
            eval(toeval);
            if(eval(objname+".sort")){objname+="["+eval(objname+".length-1")+"]"};
            oldniva=niva
        };
        return this.xmlobject
    },
    show_json_structure:function(obj,debug,l){
        var x='';
        if (obj.sort){x+="[\n"} else {x+="{\n"};
        for (var i in obj){
            if (!obj.sort){x+=i+":"};
            if (typeof obj[i] == "object"){
                x+=this.show_json_structure(obj[i],false,1)
            }
            else {
                if(typeof obj[i]=="function"){
                    var v=obj[i]+"";
                    //v=v.replace(/\t/g,"");
                    x+=v
                }
                else if(typeof obj[i]!="string"){x+=obj[i]+",\n"}
                else {x+="'"+obj[i].replace(/\'/g,"\\'").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r")+"',\n"}
            }
        };
        if (obj.sort){x+="],\n"} else {x+="},\n"};
        if (!l){
            x=x.substring(0,x.lastIndexOf(","));
            x=x.replace(new RegExp(",\n}","g"),"\n}");
            x=x.replace(new RegExp(",\n]","g"),"\n]");
            var y=x.split("\n");x="";
            var lvl=0;
            for (var i=0;i<y.length;i++){
                if(y[i].indexOf("}")>=0 || y[i].indexOf("]")>=0){lvl--};
                tabs="";for(var j=0;j<lvl;j++){tabs+="\t"};
                x+=tabs+y[i]+"\n";
                if(y[i].indexOf("{")>=0 || y[i].indexOf("[")>=0){lvl++}
            };
            if(debug=="html"){
                x=x.replace(/</g,"&lt;").replace(/>/g,"&gt;");
                x=x.replace(/\n/g,"<BR>").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;")
            };
            if (debug=="compact"){x=x.replace(/\n/g,"").replace(/\t/g,"")}
        };
        return x
    },
    no_fast_endings:function(x){
        x=x.split("/>");
        for (var i=1;i<x.length;i++){
            var t=x[i-1].substring(x[i-1].lastIndexOf("<")+1).split(" ")[0];
            x[i]="></"+t+">"+x[i]
        }    ;
        x=x.join("");
        return x
    },
    attris_to_tags: function(x){
        var d=' ="\''.split("");
        x=x.split(">");
        for (var i=0;i<x.length;i++){
            var temp=x[i].split("<");
            for (var r=0;r<4;r++){temp[0]=temp[0].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")};
            if(temp[1]){
                temp[1]=temp[1].replace(/'/g,'"');
                temp[1]=temp[1].split('"');
                for (var j=1;j<temp[1].length;j+=2){
                    for (var r=0;r<4;r++){temp[1][j]=temp[1][j].replace(new RegExp(d[r],"g"),"_jsonconvtemp"+r+"_")}
                };
                temp[1]=temp[1].join('"')
            };
            x[i]=temp.join("<")
        };
        x=x.join(">");
        x=x.replace(/ ([^=]*)=([^ |>]*)/g,"><$1>$2</$1");
        x=x.replace(/>"/g,">").replace(/"</g,"<");
        for (var r=0;r<4;r++){x=x.replace(new RegExp("_jsonconvtemp"+r+"_","g"),d[r])}    ;
        return x
    }
};


if(!Array.prototype.push){
    Array.prototype.push=function(x){
        this[this.length]=x;
        return true
    }
};

if (!Array.prototype.pop){
    Array.prototype.pop=function(){
          var response = this[this.length-1];
          this.length--;
          return response
    }
};
分享到:
评论

相关推荐

    xml转换成json类

    该方法以 XML 字符串数据为输入并将其转换成 JSON 格式的数据输出。这种 PHP 的解决方案有以下几方面的优点: 可以独立模式运行,在命令行下执行。 可以包含到已有服务器端代码工件中。 很容易承载为 Web 上的 ...

    XML转换为JSON

    "XML转换为JSON"的过程是将XML格式的数据转换成JSON格式,以便于在支持JSON的环境中更好地处理和传输。这个过程通常涉及到以下几个关键步骤: 1. **解析XML**:首先,我们需要解析XML文档,将其解析成一个解析树或...

    微信小程序-xml字符串转换json格式,适用于微信小程序

    xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 &lt;title&gt;...

    xml文件转json

    xml转换为json的js库文件

    XML转换为JSON(支持多种方法)

    在Java中,`json-lib`是一个非常流行的JSON库,它提供了将XML转换为JSON的功能。以下是如何使用json-lib实现这一转换的步骤: 1. 引入依赖:在项目中引入json-lib的JAR包,通常可以通过Maven或Gradle添加依赖。 2....

    将VOC格式的数据集转换为COCO格式,xml格式转换成json格式

    将VOC格式的数据集转换为COCO格式,xml格式转换成json格式 effcientdet等网络中均可用到

    xml转成json的python脚本

    xml转成json的python脚本 目录名称作为参数,你必须首先安装python2.7,pip,xmltodict

    Node.js-用于将XML转换为JSON和JSON到XML的Android库

    标题中的“Node.js-用于将XML转换为JSON和JSON到XML的Android库”指的是一个针对Android平台的开发库,该库允许开发者在Android应用中进行XML与JSON之间的转换。XML(Extensible Markup Language)是一种结构化数据...

    xml转换json数据类,可直接使用

    标题中的"xml转换json数据类"指的是一个编程类库,它提供了将XML数据转换为JSON数据的功能。这个类库可能适用于多种编程语言,如Java、Python、C#或JavaScript等,使得开发者能够轻松地在XML和JSON之间进行数据互换...

    java&android;解析xml 将xml转换为json

    java&android;解析xml 将xml转换为json java&android;解析xml 将xml转换为json 原文地址:https://blog.csdn.net/u010838785/article/details/82258411

    xstream将xml文档转换成json对象

    为了将XML转换为JSON,我们需要一个额外的库,如Jackson或Gson。这里以Gson为例: ```xml &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt; &lt;artifactId&gt;gson &lt;version&gt;2.8.6 ``` 引入Gson后,我们可以将XML转换为...

    通过js把xml转化成json

    在使用Ajax的时候,通常是将数据以XML的格式返回客户端,然后使用Javascript解析DOM结构。但W3C自带的方法和属性在操作的时候...处理一般的XML,可以通过以下的方法,将XML转换成JSON后,访问节点的时候格式很简单。

    java的xml和json相互转换工具类,亲测直接用

    它们各自有着不同的特性和应用场景,但有时我们需要将XML数据转换为JSON,或者将JSON数据转换为XML,以满足不同系统间的数据交互需求。本篇文章将详细介绍Java中如何实现XML和JSON的相互转换,并提供一个名为`XmlTo...

    xml & json 转换工具

    它也支持将JSON数据转换为XML,这与我们的转换任务相符。 3. **xstream-1.3.1.jar**:XStream是另一个Java库,它提供了一种简单的方式来序列化和反序列化Java对象为XML。在XML到JSON转换过程中,XStream可能首先...

    将string类型xml字符串转为json字符串

    在IT行业中,数据交换和存储经常需要在不同的格式之间转换,XML(可扩展标记语言)和JSON(JavaScript对象表示法)就是两种常见的数据格式。XML以其结构化和语义化的特性,广泛应用于Web服务和数据交换,而JSON因其...

    xml转换位JSON对象

    JSON数据由键值对(key-value pairs)组成,支持数组和对象。 2. 转换原理 - 将XML解析成一个数据结构(如DOM树或SAX事件流)。 - 将解析后的数据结构映射为JSON对象。 - 序列化JSON对象为字符串。 3. ...

    java实现Xml与json之间的相互转换操作示例

    同时,可以通过编写相应的工具类来实现xml与json的转换,例如上述示例中提到的XmlExercise工具类就提供了xml字符串和xmlDocument转换为json字符串的功能,以及json字符串转换成xml字符串的功能。 4. 实例讲解:在...

    json自动转换成xml的json包

    在某些情况下,由于特定的应用需求,可能需要将JSON数据转换为XML格式。 本"json自动转换成xml的json包"提供了一种便捷的方式,将JSON对象或数据自动转化为XML文档。这对于那些需要在JSON和XML之间进行数据互换的...

    json转xml插件工具

    - JQuery - jquery.json2xml.js - jquery.xml2json.js 2. XML 字符串转换成 JSON 对象 $.xml2json(str); 3. JSON 对象转换成 XML 字符串 $.json2xml(obj);

    解析xml转换成功json数据

    将手机端常用的世界各区域的中文名称和英文名称(两个xml文件),转换成json文件,便于解析和使用。需要注意的时候两个xml中的文件数据并没有一一匹配,但是json文件已经做了处理,是数据最全的。本工程代码是使用C#...

Global site tag (gtag.js) - Google Analytics