json对象转字符串如何实现


Posted in Javascript onDecember 02, 2012

背景:大部分浏览器已经实现了json对象转字符串的原生api支持,那在较低版本浏览器浏览器——如大家最喜爱的IE6——里如何实现呢?
首先运行以下方法,测试各种情况下,JSON.stringify的输出,这有助于下文代码的实现以及测试。用例不一定完整,欢迎补充

function test_toStringify(){ 

var result = { 

"JSON.stringify(undefined)": JSON.stringify(undefined), 

"JSON.stringify(null)": JSON.stringify(null), 

"JSON.stringify(123)": JSON.stringify(123), 

"JSON.stringify(true)": JSON.stringify(true), 

"JSON.stringify('')": JSON.stringify(''), 

"JSON.stringify('abc')": JSON.stringify('abc'), 

"JSON.stringify(null)": JSON.stringify(null), 

"JSON.stringify([1,2,3])": JSON.stringify([1,2,3]), 

"JSON.stringify([undefined, undefined])": JSON.stringify([undefined, undefined]), 

"JSON.stringify({name:'chyingp', age:24, u:undefined})": JSON.stringify({name:'chyingp', age:24, u:undefined}) 

}; 

var str = ''; 

for(var key in result){ 

if(typeof result[key] === 'string'){ 

str += key + " : '" + result[key] + "'\n"; 

}else{ 

str += key + " : " + result[key] + "\n"; 

} 

} 

console.log(str); 

} 

test_toStringify();

输出结果如下:
JSON.stringify(undefined) : undefined 

JSON.stringify(null) : 'null' 

JSON.stringify(123) : '123' 

JSON.stringify(true) : 'true' 

JSON.stringify('') : '""' 

JSON.stringify('abc') : '"abc"' 

JSON.stringify([1,2,3]) : '[1,2,3]' 

JSON.stringify([undefined, undefined]) : '[null,null]' 

JSON.stringify({name:'chyingp', age:24, u:undefined}) : '{"name":"chyingp","age":24}'

下面是json对象转字符串的代码实现:
function is_number(obj){ return Object.prototype.toString.call(obj)==='[object Number]'; } 

function is_boolean(obj){ return Object.prototype.toString.call(obj)==='[object Boolean]'; } 

function is_string(obj){ return Object.prototype.toString.call(obj)==='[object String]'; } 

function is_null(obj){ return Object.prototype.toString.call(obj)==='[object Null]'; } 

function is_undefined(obj){ return Object.prototype.toString.call(obj)==='[object Undefined]'; } 

function is_object(obj){ return Object.prototype.toString.call(obj)==='[object Object]'; } 

function is_array(obj){ return Object.prototype.toString.call(obj)==='[object Array]'; } 

function is_function(obj){ return Object.prototype.toString.call(obj)==='[object Function]'; } 

function quote(str){ return '"' + str + '"'; } 

var basic_map = { 

'[object Undefined]': true, 

'[object Number]': true, 

'[object Null]': true, 

'[object Boolean]': true 

} 

function basic_type(obj){ return basic_map[ Object.prototype.toString.call(obj) ]; } 

JSON = window.JSON || {}; 

//其实就是JSON.stringify 

JSON.toStr = function(obj){ 

if(is_string(obj) || is_null(obj) || is_number(obj) || is_boolean(obj)) return quote(obj); 

if(is_undefined(obj)) return obj; 

if(is_array(obj)){ 

var left = "[", 

middle = [], 

right = "]", 

value; 

var callee = arguments.callee; 

for(var i=0,len=obj.length; i<len; i++){ 

var value = obj[i]; 

if( typeof value === 'undefined' ){ 

middle.push(null+''); 

}else{ 

if( basic_type(value) ){ 

middle.push( value ) 

}else{ 

middle.push( callee(obj[i]) ) 

} 

} 

} 

return left+ middle.join(",") +right; 

} 

if(is_object(obj)){ 

var left = "{", 

middle = [], 

right = "}", 

value ; 

var callee = arguments.callee; 

for(var key in obj){ 

var value = obj[key]; 

if(typeof obj[key] === 'undefined') continue; 

if( basic_type(value) ){ 

middle.push( quote(key) + ':'+ value ); 

}else{ 

middle.push( quote(key) + ':'+ callee(value) ); 

} 

} 

return left + middle.join(', ') + right; 

} 

}; 

!JSON.stringify && (JSON.stringify = JSON.toStr);

以上代码仅为练手用,如有冗余及效率问题敬请见谅。如有错误则请帮忙指出 :)
Javascript 相关文章推荐
js中将多个语句写成一个语句的两种方法小结
Dec 08 Javascript
Mootools 1.2教程 Tooltips
Sep 15 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
Dec 11 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
angular简介和其特点介绍
Jan 29 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
自定义javascript验证框架示例【附源码下载】
May 31 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 Javascript
javascript 构造函数强制调用经验总结
Dec 02 #Javascript
js精度溢出解决方案
Dec 02 #Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 #Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 #Javascript
javascript控制swfObject应用介绍
Nov 29 #Javascript
javascript 保存文件到本地实现方法
Nov 29 #Javascript
jquery连缀语法如何实现
Nov 29 #Javascript
You might like
一个很不错的PHP翻页类
2009/06/01 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
DOM 基本方法
2009/07/18 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
如何用python处理excel表格
2020/06/09 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
民族学专业求职信
2014/07/28 职场文书
2014年预备党员端正入党动机思想汇报
2014/09/13 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
2014年新教师工作总结
2014/11/08 职场文书
领导干部失职检讨书
2015/05/05 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS