Ⅰ 如何在js中实现相互转换XML和JSON
XML转JSON
functionXmlToJson(){
}
XmlToJson.prototype.setXml=function(xml){
if(xml&&typeofxml=="string"){
this.xml=document.createElement("div");
唯哪this.xml.innerHTML=xml;
this.xml=this.xml.getElementsByTagName("*")[0];
}
elseif(typeofxml=="object"){
this.xml=xml;
}
};
XmlToJson.prototype.getXml=function(){
returnthis.xml;
};
XmlToJson.prototype.parse=function(xml){
this.setXml(xml);
returnthis.convert(this.xml);
};
XmlToJson.prototype.convert=function(xml){
if(xml.nodeType!=1){
returnnull;
}
varobj={};
obj.xtype=xml.nodeName.toLowerCase();
varnodeValue=(xml.textContent||"").replace(/( | )/g,"").replace(/^s+|s+$/g,"");
if(nodeValue&&xml.childNodes.length==1){
obj.text=nodeValue;
}
if(xml.attributes.length>指悄码0){
for(varj=0;j<xml.attributes.length;j++){
varattribute=xml.attributes.item(j);
obj[attribute.nodeName]=attribute.nodeValue;
}
}
if(xml.childNodes.length>0){
varitems=[];
for(vari=0;i<xml.childNodes.length;i++){
varnode=xml.childNodes.item(i);
varitem=this.convert(node);
if(item){
items.push(item);
}
}
if(items.length>0){
obj.items=items;
}
}
returnobj;
};
//调用示例
varxmlParser=newXmlToJson();
varjson=xmlParser.parse(xml);
JSON转XML
functionJsonToXml()运世{
this.result=[];
}
JsonToXml.prototype.spacialChars=["&","<",">",""","'"];
JsonToXml.prototype.validChars=["&","<",">",""","'"];
JsonToXml.prototype.toString=function(){
returnthis.result.join("");
};
JsonToXml.prototype.replaceSpecialChar=function(s){
for(vari=0;i<this.spacialChars.length;i++){
s=s.replace(newRegExp(this.spacialChars[i],"g"),this.validChars[i]);
}
returns;
};
JsonToXml.prototype.appendText=function(s){
s=this.replaceSpecialChar(s);
this.result.push(s);
};
JsonToXml.prototype.appendAttr=function(key,value){
this.result.push(""+key+"=""+value+""");
};
JsonToXml.prototype.appendFlagBeginS=function(s){
this.result.push("<"+s);
};
JsonToXml.prototype.appendFlagBeginE=function(){
this.result.push(">");
};
JsonToXml.prototype.appendFlagEnd=function(s){
this.result.push("</"+s+">");
};
JsonToXml.prototype.parse=function(json){
this.convert(json);
returnthis.toString();
};
JsonToXml.prototype.convert=function(obj){
varnodeName=obj.xtype||"item";
this.appendFlagBeginS(nodeName);
vararrayMap={};
for(varkeyinobj){
varitem=obj[key];
if(key=="xtype"){
continue;
}
if(item.constructor==String){
this.appendAttr(key,item);
}
if(item.constructor==Array){
arrayMap[key]=item;
}
}
this.appendFlagBeginE();
for(varkeyinarrayMap){
varitems=arrayMap[key];
for(vari=0;i<items.length;i++){
this.convert(items[i]);
}
}
this.appendFlagEnd(nodeName);
};
//调用示例:
varjsonParser=newJsonToXml();
varxml=jsonParser.parse(json);
Ⅱ 前端js把json字符串转json对象 java对象转json对象命令
最近在逛编程问题解答的时候,看到这样的提问:如何将一个JSON数组类型的字符串转换为JSON数组,然后遍历数组取出JSON对象,最后在JS中取出里面的属性。在这里给同样有疑问的朋友做下解答,
首先我们追本溯源问一下,JSON究竟是什么东西?为什么JSON就是易于数据交换?本文将从以下几个方面去理解JSON:
首先是对“JSON是一种轻量的数据交换格式”的理解;
然后来看经常被混为一谈的JSON和JS对象的区别;
json字符串转换成json数组并遍历属性值;
什么是JSON? JSON是一种轻量级的数据交换格式。
如果没有去过JSON的官方介绍可以去一下这里,官方介绍已经很清楚地表述了JSON是什么,我将JSON是什么提炼成以下几个方面:
1. 一种数据格式
什么是格式?就是规范你的数据要怎么表示,举个栗子,有个人叫“二百六”,身高“160cm”,体重“60kg”,现在你要将这个人的这些信息传给别人或者别的什么东西,你有很多种选择:
以上所有选择,传递的数据是一样的,但是你可以看到形式是可以各式各样的,这就是各种不同格式化后的数据,JSON是其中一种表示方式。
2. 基于文本的数据格式
JSON是基于文本的数据格式,相对于基于二进制的数据,所以JSON在传递的唤老时候是传启宏递符合JSON这种格式(至于JSON的格式是什么我们第二部分再说)的字符串,我们常会称为“JSON字符串”。
3. 轻量级的数据格式
在JSON之前,有一个数据格式叫xml,现在还是广泛在用,但是JSON更加轻量,如xml需要用到很多标签,像上面的例子中,你可以明显看到xml格式的数据中标签本身占据了很多空间,而JSON比较轻量,即相同数据,以JSON的格式占据的带宽更小,这在有大量数据请求和传递的情况下是有明显优势的。
4. 被广泛地用于数据交换
轻量已经是一个用于数据交换的优势了,但更重要的JSON是易于阅读、编写和机器解析的,即这个JSON对人和机器都是友好的,而且又轻,独立于语言(因为是基于文本的),所以JSON被广泛用于数据交换。
以前端JS进行ajax的POST请求为例,后端PHP处理请求为例:
可以看到,相同的数据在这里有3种不同的表现形式,分别是前端的JS对象、传输的JSON字符串、后端的PHP对象,JS对象和PHP对象明显不是一个东西,但是由于大家用的都是JSON来传递数据,大家都能理解这种数据格式,都能把JSON这种数据格式很容易地转化为自己能理解的数据结构,这就方便啦,在其他各种语言环境中交换数据都是如此。
经常被混为一谈的JSON和JS对象很多时候都听到“JSON是JS的一个子集”这句话,而且这句话我曾经也一直这么认为,每个符合JSON格式的字符串你解析成js都是可以的,直到后来发现了一个奇奇怪怪的东西…
1. 两个本质不同的东西为什么那么密切
JSON和JS对象本质上完全不是同一个东西,就像“斑马线”和“斑马”,“斑马线”基于“斑马”身上的条纹来呈现和命名,但是斑马是活的,斑马线是非生物。
同样,”JSON”全名”JavaScript Object Notation”,所以它的格式(语法)是基于JS的,但它就是一种格式,而JS对象是一个实例,是存在于内存的一个东西。
说句玩笑话,如果JSON是基于PHP的,可能就叫PON了,形式可能就是这样的了[‘propertyOne’ => ‘foo’, ‘propertyTwo’ => 42,],如果这样,那么JSON可能现在是和PHP比较密切了。
此外,JSON是可以传输的,因为它是文本格式,但是JS对象是没办法传输的,在语法上,JSON也会更加严格,但是JS对象就很松了。
那么两个不同的东西为什么那么密切,因为JSON毕竟是从JS中演变出来的,语法相近。
2. JSON格式别JS对象语法表现上严格在哪
先就以“键值对为表现的对象”形式上,对比下两者的不同,至于JSON还能以怎样的形式表现,对比完后再罗列。
可以看到,相对于JS对象,JSON的格式更严格,所以和旁升大部分写的JS对象是不符合JSON的格式的。
json字符串转换成json数组并遍历属性值方式一:使用Iterator迭代器遍历取值
方法二:使用for循环
Ⅲ 如何将 javascript 对象转换成 json字符串
使用JSON.stringify 函数,将对象转换为JSON文本。
目前,Firefox、Opera、IE8以上版本也提供了本地JSON支持。其中,JSON解释器提供的函数有:JSON.parse、JSON.stringify。
对于那些并不提供本地JSON支持的浏览器可以引入脚本json2.js,来实现JSON转换功能。json2.js脚本可到https://github.com/douglascrockford/JSON-js/blob/master/json2.js页面下载。
函数说明:
JSON.stringify(value[, replacer[, space]])
参数
text
必选项。要转换为JSON文本的对象。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
space
可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。
参数reviver的委托类型
reviver(key, value)
reviver函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。
参数
key
当父节点是数组Object,key为数组索引,否则key为Object属性名。
value
节点值。
注:JSON不支持循环数据结构。
Ⅳ javascript 将xml转换为json对象
代码如下:
//ChangesXMLtoJSON
functionxmlToJson(xml){
//Createthereturnobject
varobj={};
if(xml.nodeType==1){//element
//doattributes
if(xml.attributes.length>0){
obj["@attributes"]={};
for(varj=0;j<xml.attributes.length;j++){
varattribute=xml.attributes.item(j);
obj["@attributes"][attribute.nodeName]=attribute.nodeValue;
}
}
}elseif(xml.nodeType==3){//text
obj=xml.nodeValue;
}
//dochildren
if(xml.hasChildNodes()){
for(vari=0;i<xml.childNodes.length;i++){
varitem=xml.childNodes.item(i);
varnodeName=item.nodeName;
if(typeof(obj[nodeName])=="undefined"){
obj[nodeName]=xmlToJson(item);
}else{
if(typeof(obj[nodeName].length)=="undefined"){
varold=obj[nodeName];
obj[nodeName]=[];
obj[nodeName].push(old);
}
obj[nodeName].push(xmlToJson(item));
}
}
}
returnobj;
};
Ⅳ js怎样生成json的数据
1、按照描述,题主是想将多条数据记录提交到服务端,同时服务端将数据插入到数据库。那么思路是将多条数据存在数组中,调用post方法的接口传入后端。
2、方法如下:
var sendData = [];
sendData.push({name:'david',age:'20'});
sendData.push({name:'peter',age:'23'});
2、jquery中post与get的区别:
1) $.get() 方法使用GET方法来进行异步请求的。$.post() 方法使用POST方法来 进行异步请求的。
2)get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体 内容发送给Web服务器的,这种传递是对用户不可见的。
3) get方式传输的数据大小不能超过2KB 而POST要大的多。
4)GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。