jsonstringify作用,jsonstringfy 字符串

http://www.itjxue.com  2023-01-05 07:26  来源:未知  点击次数: 

JSON.stringify详解

当我们使用 JSON.stringify() 序列化一个值为JSON字符串,只有 JSON安全的值 才可以通过 JSON.stringify() 转换为字符串。那么,什么是 JSON安全的值 ?能够有效用JSON形式表示的任何值。

非JSON安全的值,例如: undefined 、 function 和 symbol 以及循环引用的object(对象结构的属性引用通过创建彼此,构成一个无限循环)。对一个标准的JSON结构来说,这些值都是非法的,主要是因为它们无法移值到其他支持JSON的语言中。

当 JSON.stringify() 遇到 undefined 、 function 和 symbol 的时候,会自动忽略它们的值,如果这样的值在数组中会被替换成 null (这样数组的索引信息就不会被改变)。如果这样的值出现在对象的属性中,那这个属性会被排除掉。

JSON字符串有一个特殊的行为,如果一个对象定义了 toJSON() 方法,那这个方法先被调用,并且将它返回的值进行序列化。

如果将一个含有非法JSON值的对象序列化成JSON字符串,需要定义一个 toJSON() 方法,用于返回该对象的JSON安全版本。

JSON.stringify()第二个参数是个可选参数,被称为replacer。这个参数可以是数组或者函数。它提供了一个过滤机制制定了应该或者不应该包含哪些属性,从而实现了对象可定制的递归序列化,这种做法和toJSON()如何序列化准备一个值很相似。

如果replacer是一个数组,它应该是一个字符串数组,每一个值都指定了对象的属性名称,代表属性应该被加入到序列化中,如果一个属性不在这个列表中,它会被跳过。

如果replacer是一个函数,它首先会被该对象调用一次,然后该对象的每个属性会调用一次,每次都会给这个函数传递两个值,key和value。想在序列化过程中跳过某个key,只需要返回undefined,否则返回提供的value。

第三个可选的参数也可以传递给JSON.stringify(),被称为space,被用作缩进,是为了使得输出有格式更加漂亮。space可以是一个正整数,指定每层缩进应该缩进多少个空格。或者space也可以是个字符串,其值的前十个字符被用于每个缩进层次。

JSON.stringify() 的使用

复制粘贴一下 JSON.stringify() 三个参数的含义:

返回值: 返回包含 JSON 文本的字符串。

从上面的参数说明中可以看到,第二个参数可以是一个函数或者数组,这给了我们很大的发挥空间。

stringify() 的第一个和第三个参数都好理解,所以下面主要说的是第二个参数。

当第二个参数为数组时,可作为条件筛选使用。

例如有如下对象:

如果我们只需要 name 属性,则可以这样:

这个特性只对对象的根属性生效,例如:

即使第二层上也有name属性,但在筛选时并不会选中。

当对一个数组进行转换时,会筛选数组第一层的每个值,例如:

基本上数组的用法就是如此了。

函数的发挥空间是很大的,理所当然地用法也就比较多了。

当第二个参数为函数时,stringify() 会给函数传递两个参数,参数值为每一个成员的键和值。但跟数组参数不同的是,函数会处理所有层级上的每一个成员。

例如:

所有符合条件的内容都被修改了(注意『小红』是『小刚』的下一层)。

正是因为函数的这个特性,我们可以很方便地实现一些可能比较麻烦的功能。

比如上面的例子,如果不使用 stringify() 方法而想要修改所有层级上的age属性的值,就需要需要进行深循环。

上面的例子中,如果想要复制一份arr的数据,通常是进行深拷贝,但其实也可以使用stringify(),只需要配合 JSON.parse() 即可:

stringify() 不能处理值为函数的成员,当某个成员的值为函数时,在转换过程中会被自动排除,例如:

同样的,JSON.parse() 方法是不能处理函数格式的字符串的。

“JSON.parse”和“JSON.stringify”有什么区别?

1.JSON.parse(“要转换的数组”) 。

2.JSON.stringify(“要转化的数组”)。

3.首先,两个方法的用法是有差别的。

①.JSON.stringify是从一个对象中解析出字符串。

②.JSON.parse是从一个字符串中解析出json(键值对)。?

4.所以在使用的时候如果参数不对应,就不能正确转换。

一.JSON.parse()【从一个字符串中解析出json对象】

例子:

1.//定义一个字符串,var data='{"name":"goatling"}'。

2.//解析对象,JSON.parse(data)。

3.结果是:

name:"goatling"

二.JSON.stringify()【从一个对象中解析出字符串】

1.var data={name:'goatling'}

2.JSON.stringify(data)

3.结果是:

'{"name":"goatling"}'

JSON.parse和JSON.stringify的区别

1.parse 用于从一个字符串中解析出json 对象。例如

var str='{"name":"cpf","age":"23"}'

经 JSON.parse(str) 得到:

Object:

age:"23"

name:"cpf"

_proto_:Object

ps:单引号写在{}外,每个属性都必须双引号,否则会抛出异常

2.stringify用于从一个对象解析出字符串,例如

var a={a:1,b:2}

经 JSON.stringify(a)得到:

“{“a”:1,"b":2}”

JSON.stringify,这个函数的作用主要是为了系列化对象的。(或者说是将原来的对象转换为字符串的,如json对象):

首先定义一个json对象,var jsonObject = { "UserID": "1", "UserName": "xiaozhang" };

使用alert(jsonObject)弹出一下,显示:

[Object

Object]

然后调用一下JSON.stringify一下,将json对象转换为json字符串。

var

jsontext = JSON.stringify(jsonObject);

alert(jsontext);

显示如下:

{

"UserID":

"1",

"UserName":

"xiaozhang"

}

2、jQuery.parseJSON,将一个JSON字符串转换为JSON对象(JSON.parse也是将一个json字符串解析为json对象),如下面

首先定义一个JSON字符串,var c = '{"name":"Mike","sex":"男","age":"29"}';(注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。)

然后调用jQuery.parseJSON将其转换为JSON对象,

var

employeejson=jQuery.parseJSON(c);

访问的时候使用employeejson.name,employeejson.sex,employeejson.age获取相应的值

jquery中,JSON.stringify()有什么用?

a是一个javascript对象,只能js使用,且在内存中

如果要保存这个对象或传给其他的程序,如服务器使用,就必须转为字符串,这个过程叫做json序列化

对象是无法通过网络传输,必须通过统一的方法转码再解码使用

(责任编辑:IT教学网)

更多

推荐思科认证文章