php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解
这次给大家带来JSON.parse()与JSON.stringify()和eval()使用方法详解,JSON.parse()与JSON.stringify()和eval()使用的注意事项有哪些,下面就是实战案例,一起来看一下。
“JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使JSON成为理想的数据交换语言,作用是易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。”
今天在这里笔者想简单谈谈jquery里面的JSON.parse()和JSON.stringify()函数,顺便还会提一下原生JS里面的eval()函数
(1)JSON.parse 函数
作用:将 JavaScript 对象表示法 (JSON) 字符串转换为对象。
语法:JSON.parse(text [, reviver])
参数:
text 必需。 一个有效的 JSON 字符串。
reviver 可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。
返回值:一个对象或数组
example:var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json); //解析为JSON对象
document.write(info.name + ' is a student of ' + info.University + ' and he is ' + info.age + " years old."); /info为Object对象
(2)JSON.stringify()函数
作用:将 JavaScript 值转换为 JavaScript 对象表示法 (JSON) 字符串
语法:JSON.stringify( value [, replacer] [, space])
参数:
value 必需,通常为需要转换的JavaScript值(通常为对象或者数组)
replacer 可选,用于转换结果的函数或者数组
space 可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。
返回值:一个包含JSON文本的字符串
example:var info = {name:"GDT",age:,University:"GDUT"};
var json = JSON.stringify(info); //转换为JSON字符串
document.write(json); //output为{"name":"GDT","age":23,"University":"GDUT"}
(3)eval()函数
作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:eval(string)
参数:
string 必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值:返回计算string的值,如果有的话 (没有则不做任何改变返回)
example:eval("x=;y=;document.write(x*y)"); //output为
document.write(eval("+")); //output为
var x=;
document.write(eval(x+)); //output为
使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码// JSON.parse()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = JSON.parse(json); //解析为JSON对象
document.write(info); //output为[object Object]
//eval()
var json = '{"name":"GDT","age":,"University":"GDUT"}';
var info = eval('(' + json + ')'); //解析为JSON对象
document.write(info); //output为[object Object]
不知道大家有木有注意到eval()还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是:
原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。请看下列例子的不同alert(eval("{}")); // return undefined
alert(eval('('+'{}'+')')); // return object[Object]
另外,相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。比如以下代码:var str = '{"a":"b"}';
document.write(eval("("+str+")")); //正常解析为对象
var str = '{"a": (function(){alert("I can do something bad!");})()}';
eval('('+str+')'); //可以用来执行木马脚本
如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题,可见,虽然eval()功能很强大,但是实际用到的机会并不多。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解相关推荐
- android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】
本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...
- java构造和解析json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java json解析 代码_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java构建json_Java构造和解析Json数据的两种方法详解一
在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...
- java读写json格式的文件方法详解.txt,并批量存储进redis
捐躯赴国难,视死忽如归.恸哭六军俱缟素,冲冠一怒为红颜.君子坦荡荡,小人长戚戚.风日晴和人意好,夕阳箫鼓几船归.民为贵,社稷次之,君为轻.Java 读写json格式的文件方法详解 文章录入:7747. ...
- JS中的JSON.Stringify 方法详解
在大厂的前端面试过程中,JSON.Stringify常常被问到,那么能够熟练的运用,掌握就必不可少. 那么,到底什么是 JSON.stringify 方法? 方法基本介绍 JSON.stringify ...
- js中转换json对象方法详解及使用案例
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...
- JS中Json数据的处理和解析JSON数据的方法详解
学习目标: 节数 知识点 要求 第一节 数组去重 数组去重 了解 第二节 数组排序 数组排序 了解 第三节 json概述 json概述 掌握 第四节 json方法 json方法 掌握 第五节 json ...
最新文章
- 经常收到信用卡邀请短信,但为什么总是办不下来?
- UVa 297 四分树
- 人生没有后悔药,云主机可以有“时光机”
- python跳一跳编程构造_Python + 新手 制作“跳一跳”辅助程序
- spring扫描bean总结
- stm32f4串口烧录[flymcu]
- 我为什么弃用OpenStack转向CNware
- php小说阅读例子,Thinkphp掌上阅读功能完善强大的小说源码 - 四套模板
- Adobe国际认证证书,深化设计师个人优势!
- hansontable编辑器
- 【Mac】使用Karabiner 映射输入法快捷键
- Java集成ElasticSearch及配置类工具类整理
- 国企招聘计算机专业的技能要求,为何很多国企招聘时,要求“重点大学”学历,3点原因学生要明白...
- vimdiff颜色设置 + vimrc设置 (copied)
- 简单温习一下快速排序
- iOS5完美越狱箭在弦上 Android更赚钱
- android BannerView实现自动轮播广告的用法(参考自github)
- Android中SQLite应用详解
- mysql筛选向导怎么用_Navicat筛选向导
- JNI官方规范中文版
热门文章
- 译 | 宣布ML.NET 1.2 及模型生成器更新(用于 .NET 的机器学习)
- 8个月打磨,一份送给程序员的「分布式系统」合集
- asp.net core 集成JWT
- 为什么不要使用 async void
- [小技巧]ASP.NET Core中如何预压缩静态文件
- Orleans之EventSourcing
- Orleans例子再进一步
- ASP.NET Core MVC – Form Tag Helpers
- 快速搭建本地 .NET Core 运行时调试环境
- 官方博客明确了 .NET Core RC2/RTM 时间表