JSON字符串和对象之间的转换详解


Posted in Javascript onMay 26, 2015

JSON(JavaScript Object Notation) 是JavaScript编程语言的一个子集。正因JSON是JavaScript的一个子集,所以它可清晰的运用于此语言中。

eval函数 JSON文本转换为对象

为了将JSON文本转换为对象,可以使用eval函数。eval函数调用JavaScript编辑器。由于JSON是JavaScript的子集,因此编译器将正确的解析文本并产生对象结构。文本必须括在括号中避免产生JavaScript的语法歧义。
var obj = eval('(' + JSONTest + ')');eval函数非常快速。它可以编译执行任何JavaScript程序,因此产生了安全性问题。当使用可信任与完善的源代码时才可以使用eval函数。这样可以更安全的解析JSON文本。使用XmlHttp的web应用,页面之间的通讯只允许同源,因此是可以信任的。但这却不是完善的。如果服务器没有严谨的JSON编码,或者没有严格的输入验证,那么可能传送包括危险脚本的无效JSON文本。eval函数将执行恶意的脚本。

JSON解释器 JSON.parse、JSON.stringify

使用JSON解析器可以防止像eval函数转换JSON文本为对象那样的安全隐患。JSON解析器只能辨识JSON文本,拒绝所有脚本。提供了本地JSON支持的浏览器的JSON解析器将远快于eval函数。

目前,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.parse 函数

将JSON文本转换为对象。
JSON.parse(text[, reviver])
参数
text
必选项。要转换为对象的JSON文本。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。

JSON.stringify 函数

将对象转换为JSON文本。
JSON.stringify(value[, replacer[, space]])
参数
text
必选项。要转换为JSON文本的对象。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
space
可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。
参数reviver的委托类型
reviver(key, value)
reviver函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。
参数
key
当父节点是数组Object,key为数组索引,否则key为Object属性名。
value
节点值。
注:JSON不支持循环数据结构。

jQuery.parseJSON( jsonTex )

jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)对象。当然如果有兴趣可以自己封装一个jQuery扩展,jQuery.stringifyJSON(obj)将JSON转为字符串。

以上所述就是本文的全部内容了希望大家能够喜欢。

Javascript 相关文章推荐
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
Apr 01 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
Jun 26 Javascript
jQuery实现简单下拉导航效果
Sep 07 Javascript
js事件源window.event.srcElement兼容性写法(详解)
Nov 25 Javascript
浅谈Node.js:理解stream
Dec 08 Javascript
BootStrap Table对前台页面表格的支持实例讲解
Dec 22 Javascript
BootStrap实现带关闭按钮功能
Feb 15 Javascript
js移动端事件基础及常用事件库详解
Aug 15 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 #Javascript
Javascript实现飞动广告效果的方法
May 25 #Javascript
javascript自定义右键弹出菜单实现方法
May 25 #Javascript
JS+DIV实现鼠标划过切换层效果的方法
May 25 #Javascript
JavaScript实现仿网易通行证表单验证
May 25 #Javascript
js+cookies实现悬浮购物车的方法
May 25 #Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 #Javascript
You might like
php 静态变量与自定义常量的使用方法
2010/01/26 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php文件上传的简单实例
2013/10/19 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
基于复选框demo(分享)
2017/09/27 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
Python2实现的图片文本识别功能详解
2018/07/11 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
有关环保的标语
2014/06/13 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
分居协议书范本
2014/11/03 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
爱国影片观后感
2015/06/18 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
能让Python提速超40倍的神器Cython详解
2021/06/24 Python