JSON.stringify是浏览器高版本带的一个将JS的Objtect对象转换为JSON字符串的一个方法,不过再IE6下面,并不存在JSON这一对象,因此,用到此方法时,需要写一套兼容性的代码。 JSON.stringify的一些规则以及注意点:当对象为数字,null,boolean的时候,直接转换为相应的字符串就可以了。但是string,function,undefined,object,array等,需要特殊处理。
1.undefined,该类型使用JSON.stringify处理的时候,如果对象就是undefined,将会输出"undefined",如果对象是数组的元素,那么将会变成null,比如:[undefined],stringify之后变成了"[null]";如果该对象是object的元素,那么该属性将当作不存在,不输出,比如{a:1,b:undefined},stringify之后是"{\"a\":1},B属性直接抛弃。
2.字符串在拼接的时候需要把内部的双引号处理掉
代码如下
/**
* JSON stringify的实现
* @author norkts<norkts@gmail.com>
* @version 1.0 2015-11-24 15:11 实现了基本功能
* @version 1.1 2015-11-24 15:19 norkts 增加了JSON.stringify的兼用代码实现
* @version 1.2 2015-11-24 15:49 norkts 修改数组indexOf在IE下不兼容的写法,修改了undefined值的特殊处理
*/
(function(NS){
//简单类型
var simpleTypes = ["number", "boolean", "undefined", "string", "function"];
//JSON.stringify的主函数
function stringify(object){
var type = typeof object;
//如果是简单类型,则直接返回简单类型的结果
if(indexOf(simpleTypes, type) > -1){
return parseSimpleObject(object);
}
//数组对象的
if(object instanceof Array){
var len = object.length;
var resArr = [];
for(var i = 0; i < len; i++){
var itemType = typeof object[i];
if(indexOf(simpleTypes, itemType) > -1){
//undefined特殊处理,数组中变成null
if(itemType != "undefined"){
resArr.push(parseSimpleObject(object[i]));
}else{
resArr.push("null");
}
}else{
//递归处理JS数组中的复杂元素
resArr.push(stringify(object[i]));
}
}
return "[" + resArr.join(",") + "]";
}
//普通object对象
if(object instanceof Object){
if(object == null){
return "null";
}
var resArr = [];
for(var name in object){
var itemType = typeof object[name];
if(indexOf(simpleTypes, itemType) > -1){
//undefined特殊处理,object中不编码
if(itemType != "undefined"){
resArr.push("\"" + name + "\":" + parseSimpleObject(object[name]));
}
}else{
resArr.push("\"" + name + "\":" + stringify(object[name]));
}
}
return "{" + resArr.join(",") + "}";
}
}
function parseSimpleObject(object){
var type = typeof object;
if(type == "string" || type == "function"){
return "\"" + object.toString().replace("\"", "\\\"") + "\"";
}
if(type == "number" || type == "boolean"){
return object.toString();
}
if(type == "undefined"){
return "undefined";
}
return "\"" + object.toString().replace("\"", "\\\"") + "\"";
}
function indexOf(arr, val){
for(var i = 0; i < arr.length; i++){
if(arr[i] === val){
return i;
}
}
return -1;
}
/**
* 将stringify做二次封装
* @param object 要处理的对象
*
*/
NS.stringify = function(object, isEncodeZh){
var res = stringify(object);
if(isEncodeZh){
var encodeRes = "";
for(var i = 0; i < res.length; i++){
if(res.charCodeAt(i) < 0xff){
encodeRes += res[i];
}else{
encodeRes += "\\u" + res.charCodeAt(i).toString(16);
}
}
res = encodeRes;
}
return res;
};
})(window);
分享到:
相关推荐
jsp使用JSON.stringify()引用的json2.js
语法: JSON.stringify(value [, replacer] [, space]) value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。 replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。
JSON.stringify在使用时,IE6、7、8会存在兼容问题,需导入json2.js
在IE6、7下使用JSON.stringify()方法兼容JS脚本
主要介绍了JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能,结合实例形式分析了JSON.parse()与JSON.stringify()方法实现深拷贝的相关实现技巧与操作注意事项,需要的朋友可以参考下
JSON.stringify是浏览器高版本带的一个将JS的Objtect对象转换为JSON字符串的一个方法,不过再IE6下面,并不存在JSON这一对象,因此,...接下来通过本文给大家分享JS实现JSON.stringify的实例代码,需要的朋友参考下吧
安全的JSON Stringify JSON.stringify的包装器,用于处理循环引用并防止已定义的getter JSON.stringify错误。 发现圆形参考时,通过返回[Circular]来处理圆形参考。 抛出错误的已定义getter通过返回[Throws]进行处理...
本文给大家介绍JSON中key动态设置及JSON.parse和JSON.stringify()的区别讲解,具体详情如下所示: var user_info_json = []; user_info_json[user_info_json.length] = eval('('+ '{'+ id +': '+ value +'}' +...
调用JSON.stringify将对象转为对应的字符串时,如果包含时间对象,时间对象会被转换为国家标准时间(ISO),而不是当前国家区域的时间,测试代码如下: 代码如下: [removed] //var o = new Date(); //console....
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。 语法 JSON.stringify(value[, replacer[, space]]) 参数说明: value: 必需,一个有效的 JSON 对象。 replacer: 可选。用于转换结果的函数...
JSON.parse(JSON.stringify(obj))我们一般用来深拷贝,其过程说白了,就是利用 JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象。至于这行代码为什么能实现深拷贝,以及它...
json字符串化日期类似于 JSON.stringify,但在日期对象中保留时区并将日期解析为Date对象。安装npm install json-stringify-date 用法采用与JSON.stringify和JSON.parse相同的参数。 var stringifyDate = require ( ...
本文深入讲解JavaScript中使用JSON.stringify的一些细节问题。首先简单回顾一下JSON和JavaScript: 不是所有的合法的JSON都是有效的JavaScript; JSON只是一个文本格式; JSON中的数字是十进制。 1. JSON....
json-stringify-确定性 确定性版本的JSON.stringify() ,因此您可以从字符串化的结果中获得一致的哈希值。 与相似,但: 没有依赖关系。 尽量少。 更好的循环检测。 支持对不带.toJSON对象(例如RegExp )进行...
使用JSON.stringify方法在JSON.stringify转义 HTML 实体。 npm install escape-html-in-json > var escape_html_entities = require ( 'escape-html-in-json' ) > var object = { name : "[removed]alert('...
JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以选择性的替换值,或者如果指定了replacer是一个数组,可选择性的仅包含数组指定的属性。...
主要介绍了JavaScript -- JSON.parse 函数 和 JSON.stringify 函数,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
下面小编就为大家分享一篇解决JSON.stringify()自动将中文转译成unicode的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
json-stringify 像JSON.stringify一样,但经过增强后,支持: 替换字符串化的json字符串时,偏移量以获得更好的输入错误。 处理圆形对象,并且不会在圆形参照上爆炸。 安装 $ npm install json-stringify --save ...
json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】。JavaScript中解析JSON的js包,页面中引入json3.js,即可使用。 使用方法:JSON.parse(str), JSON.stringify(obj) 更多详情请参考博文: ...