Ⅰ 如何在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 方式請求的數據會被瀏覽器緩存起來,因此有安全問題。