json物件格式化字串輸出
阿新 • • 發佈:2019-02-12
var JsonUti = {
//定義換行符 n: "\n",
//定義製表符 t: "\t",
//轉換String convertToString: function(obj) {
return JsonUti.__writeObj(obj, 1);
},
//寫物件 __writeObj: function(obj //物件 , level // 層次(基數為1) , isInArray) { //此物件是否在一個集合內 //如果為空,直接輸出null if (obj == null) {
return "null";
}
//為普通型別,直接輸出值 if (obj.constructor == Number || obj.constructor == Date || obj.constructor == String || obj.constructor == Boolean) {
var v = obj.toString();
var tab = isInArray ? JsonUti.__repeatStr(JsonUti.t, level - 1) : "";
if (obj.constructor == String || obj.constructor == Date) {
//時間格式化只是單純輸出字串,而不是Date物件 return tab + ("\"" + v + "\"");
}
else if (obj.constructor == Boolean) {
return tab + v.toLowerCase();
}
else {
return tab + (v);
}
}
//寫Json物件,快取字串 var currentObjStrings = [];
//遍歷屬性 for (var name in obj) {
var temp = [];
//格式化Tab var paddingTab = JsonUti.__repeatStr(JsonUti.t, level);
temp.push(paddingTab);
//寫出屬性名 temp.push(name + " : ");
var val = obj[name];
if (val == null) {
temp.push("null");
}
else {
var c = val.constructor;
if (c == Array) { //如果為集合,迴圈內部物件 temp.push(JsonUti.n + paddingTab + "[" + JsonUti.n);
var levelUp = level + 2; //層級+2
var tempArrValue = []; //集合元素相關字串快取片段 for (var i = 0; i < val.length; i++) {
//遞迴寫物件 tempArrValue.push(JsonUti.__writeObj(val[i], levelUp, true));
}
temp.push(tempArrValue.join("," + JsonUti.n));
temp.push(JsonUti.n + paddingTab + "]");
}
else if (c == Function) {
temp.push("[Function]");
}
else {
//遞迴寫物件 temp.push(JsonUti.__writeObj(val, level + 1));
}
}
//加入當前物件“屬性”字串 currentObjStrings.push(temp.join(""));
}
return (level > 1 && !isInArray ? JsonUti.n : "") //如果Json物件是內部,就要換行格式化 + JsonUti.__repeatStr(JsonUti.t, level - 1) + "{" + JsonUti.n //加層次Tab格式化 + currentObjStrings.join("," + JsonUti.n) //串聯所有屬性值 + JsonUti.n + JsonUti.__repeatStr(JsonUti.t, level - 1) + "}"; //封閉物件 },
__isArray: function(obj) {
if (obj) {
return obj.constructor == Array;
}
return false;
},
__repeatStr: function(str, times) {
var newStr = [];
if (times > 0) {
for (var i = 0; i < times; i++) {
newStr.push(str);
}
}
return newStr.join("");
}
};
//定義換行符 n: "\n",
//定義製表符 t: "\t",
//轉換String convertToString: function(obj) {
return JsonUti.__writeObj(obj, 1);
},
//寫物件 __writeObj: function(obj //物件 , level //
return "null";
}
//為普通型別,直接輸出值 if (obj.constructor == Number || obj.constructor == Date || obj.constructor == String || obj.constructor == Boolean) {
var
var tab = isInArray ? JsonUti.__repeatStr(JsonUti.t, level - 1) : "";
if (obj.constructor == String || obj.constructor == Date) {
//時間格式化只是單純輸出字串,而不是Date物件 return tab + ("\"" + v + "\"");
}
else
return tab + v.toLowerCase();
}
else {
return tab + (v);
}
}
//寫Json物件,快取字串 var currentObjStrings = [];
//遍歷屬性 for (var name in obj) {
var temp = [];
//格式化Tab var paddingTab = JsonUti.__repeatStr(JsonUti.t, level);
temp.push(paddingTab);
//寫出屬性名 temp.push(name + " : ");
var val = obj[name];
if (val == null) {
temp.push("null");
}
else {
var c = val.constructor;
if (c == Array) { //如果為集合,迴圈內部物件 temp.push(JsonUti.n + paddingTab + "[" + JsonUti.n);
var levelUp = level + 2; //層級+2
var tempArrValue = []; //集合元素相關字串快取片段 for (var i = 0; i < val.length; i++) {
//遞迴寫物件 tempArrValue.push(JsonUti.__writeObj(val[i], levelUp, true));
}
temp.push(tempArrValue.join("," + JsonUti.n));
temp.push(JsonUti.n + paddingTab + "]");
}
else if (c == Function) {
temp.push("[Function]");
}
else {
//遞迴寫物件 temp.push(JsonUti.__writeObj(val, level + 1));
}
}
//加入當前物件“屬性”字串 currentObjStrings.push(temp.join(""));
}
return (level > 1 && !isInArray ? JsonUti.n : "") //如果Json物件是內部,就要換行格式化 + JsonUti.__repeatStr(JsonUti.t, level - 1) + "{" + JsonUti.n //加層次Tab格式化 + currentObjStrings.join("," + JsonUti.n) //串聯所有屬性值 + JsonUti.n + JsonUti.__repeatStr(JsonUti.t, level - 1) + "}"; //封閉物件 },
__isArray: function(obj) {
if (obj) {
return obj.constructor == Array;
}
return false;
},
__repeatStr: function(str, times) {
var newStr = [];
if (times > 0) {
for (var i = 0; i < times; i++) {
newStr.push(str);
}
}
return newStr.join("");
}
};