JSON.parse()与JSON.stringify()和eval()使用方法详解
在和后端对接口的时候,遇到了一个问题
就是series里面数据变量进行拼接的时候,data数据里面全部是数值int类型的
但是因为某些需求需要让他进行某个数据之前的数据都为空
我试过用空字符串和undefined和null,nan都不行
后来我问了一个大神,他帮我看完以后告诉我说需要用eval进行json字符串解析,不能用JSON.parse方法
我从网上搜索了相关的方法,大家一起进行借鉴参考
ps:拼接的时候有个转义符号挺有用的,\ 这个当你需要多个双引号进行嵌套的时候可以用“\””这个方式
来源:https://www.php.cn/js-tutorial-394185.html
“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:
1 2 3 |
|
(2)JSON.stringify()函数
作用:将 JavaScript 值转换为 JavaScript 对象表示法 (JSON) 字符串
语法:JSON.stringify( value [, replacer] [, space])
参数:
value 必需,通常为需要转换的JavaScript值(通常为对象或者数组)
replacer 可选,用于转换结果的函数或者数组
space 可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。
返回值:一个包含JSON文本的字符串
example:
1 2 3 |
|
(3)eval()函数
作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法:eval(string)
参数:
string 必需,要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值:返回计算string的值,如果有的话 (没有则不做任何改变返回)
example:
1 2 3 4 |
|
重点来了:
使用eval()函数也可以将JSON字符串解析为对象,这个功能能完成JSON.parse()的功能,但是有不一样的地方,请看下面代码
1 2 3 4 5 6 7 8 |
|
不知道大家有木有注意到eval()还要用一对圆括号将字符串包起来,对此我寻找到比较好的解释就是:
原因:归结于eval本身的问题,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
解决方法:加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
请看下列例子的不同
1 2 |
|
另外,相对于写法格式严格的JSON.parse()来说,eval()可以解析任何字符串,eval是不安全的,因为eval比较宽松,会有潜在的安全性问题。比如以下代码:
1 2 3 4 |
|
如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题,可见,虽然eval()功能很强大,但是实际用到的机会并不多。
本文仅提供参考,是本人闲时所写笔记,如有错误,还请赐教,作者:阿蒙不萌,大家可以随意转载