功能非常简单的一个方法,但是有很多细节需要注意,本文通过代码实例详细介绍。

由此方法的名称入手,从 simplify 单词分析开始:

(1).simplify 是由 simple 衍化而来,加上 ify 后缀,变成一个动词,功能是使 ... 简单化。

(2).同样的道理,stringify 是由 string 衍化而来,加上 ify 后缀,功能是使 ... 字符串化。

JSON.stringify() 的定义是将参数转换为 JSON,其实就是将参数转换为字符串。

当然转换是需要遵循一定规则的,后面会分步进行详细介绍。

语法结构:

```javascript

JSON.stringify(value [, replacer] [, space])

```

参数解析:

(1).value:必需,要被转换的 JavaScript 值,通常情况下是对象直接量或者数组。

(2).replacer:可选,对 value 进行转换的函数或者数组。

(3).space:可选,向返回的 JSON 中的内容添加缩进、空白和换行符以使其更易于阅读。

上面对参数的作用做了一下简单介绍,让读者对其有一个初步印象,具体作用在下面代码实例中介绍。

**代码实例如下:**

绝大多数时候此方法是对对象或者数组的操作,实际项目中最为常见。

又由于此方法的操作就是将参数转换为 JSON,所以很多朋友想当然认为 JSON 只能是如下两种类似形式:

```javascript

{

"webName":"先思考后编码",

"url":"codingbefore.com",

"age":2

}

```

再来看一个和数组相互嵌套的形式:

```javascript

{

"web": [

{ "webName":"先思考后编码" , "url":"codingbefore.com" },

{ "webName":"网易" , "url":"163.com" }

]

}

```

其实并不是只有上述两种形式,看如下代码实例:

```javascript

console.log(JSON.stringify(5));

console.log(JSON.stringify(true));

console.log(JSON.stringify("antzone"));

console.log(JSON.stringify(null));

console.log(JSON.stringify(undefined));

console.log(JSON.stringify(function(){}));

console.log(JSON.stringify(Symbol("前端教程")));

```

![](/upload/1586420625277.jpg)

具有结果的都是JSON数据,并不仅仅是对象或者数组被转换后的字符串是JSON。

上述代码分析如下:

(1).数字会被转换为字符串"5"。

(2).布尔值true被转换为字符串"true"。

(3).字符串"antzone",打印结果带有双引号,字符串本身带有双引号,JSON.stringify()方法将"antzone"整体作为字符串处理,所以处理的结果是"\"antozne\"",如果是用单引号包裹,也会被转换为双引号。

(4).null会被转换为字符串"null"。

(5).undefined、function函数和Symbol数据会被忽略。

```javascript

console.log(JSON.stringify(new Date()));

```

代码运行效果截图如下:

![![](/upload/1586420596792.jpg)

打印出一段与时间日期相关的字符串,这是因为时间日期对象具有toJSON方法。

转换过程中,如果对象具有toJSON方法,那么会首先调用此方法,具体参阅[toJSON() 方法](http://www.codingbefore.com/article-8584-1.html)一章节。

```javascript

let antzone={

webName:'先思考后编码',

target:"分享互助",

age:5

}

console.log(JSON.stringify(antzone));

```

上述代码只有一个参数,可以看到属性被双引号包裹,这一点要特别注意,一定是双引号。

如果属性值原本是字符串,那么一定也要用双引号包裹,如果原来是单引号,也要转换为双引号。

```javascript

let arr=["先思考后编码",'分享互助',3];

console.log(JSON.stringify(arr));

```

类似,数组中的数据,如果原本是字符串,一定要采用双引号包裹。

**具有两个参数的情况:**

JSON.stringify()第二个参数可以是两种形式,一种是函数,第二种是数组,下面分别做一下介绍。

**1.当是函数的情况:**

具有两个参数,分别是对象属性和属性值,或者数组索引和数组值。

它的返回值对于value参数的序列化结果有直接的影响。

(1).如果返回值是undefined,那么value参数序列化的结果为 undefined 或者当前递归序列化对象的属性被删除。

(2).如果返回值是一个对象,那么该对象会被递归序列化。

```javascript

let arr=["先思考后编码","antzone",5];

function done(key,value){

}

let jsonStr=JSON.stringify(arr,done);

console.log(jsonStr);

```

上面的代码中,数组被序列化后的结果为undefined,因为第二个参数函数的返回值是undefined。

```javascript

let obj={

webName:"antzone",

age:2,

target:"分享互助",

team:{

a:"jquery专区",

b:"css专区"

}

}

function done(key,value){

if(value=="antzone"){

return undefined;

}

else{

return value;

}

}

let jsonStr=JSON.stringify(obj,done);

console.log(jsonStr);

```

属性值为"antzone",对应属性就会被删除,如果此函数返回的值是对象的话,会将此返回的对象递归序列化。

**2.当是数组的时候:**

(1).如果value参数是数组,那么第二个参数数组不起任何作用。

如果对象属性名称在数组元素中存在,那么此属性将会被保留,否则会被删除。

```javascript

let one=["先思考后编码","antzone","分享互助",3];

let two=["antzone",3];

let jsonStr=JSON.stringify(one,two);

console.log(jsonStr);

```

第二个数组参数不会起到任何作用。

```javascript

let obj={

antzone:"先思考后编码",

target:"分享互助",

age:3

}

let arr=["antzone",3];

let jsonStr=JSON.stringify(obj,arr);

console.log(jsonStr);

```

第二个参数数组会对对象属性进行过滤,如果对象属性名称在数组中存在,那么就会保留,否则删除。

**具有三个参数的情况:**

可以向返回值JSON文本添加缩进,具体规则如下:

(1).如果声明此参数,则将生成返回值文本,而没有任何额外空白。

(2).如果是数字,则返回值文本在每个级别缩进指定数目空格,如果space大于10,则缩进10个空格。

(3).如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。

(4).如果是非空字符串,则返回值文本在每个级别字符串前面附加上返回的字符串即可。

(5).如果是长度大于10个字符的字符串,则使用前10个字符。

(6).由于这个比较简单,就不给出代码了,通常情况下,第三个参数都是省略的。

**undefined、function和Symbol处理:**

在文章的开头部分已经提到过,JSON数据不支持上述三种类型数据。

但是在不同的上下文中,JSON.stringify() 方法对它们的处理方式不同。

直接通过JSON.stringify() 方法转换三种数据,方法的返回值是undefined,也可以认为被转换为了undefined。

如果上述三种类型的值作为对象属性,那么会直接被忽略,代码如下:

```javascript

let antzone={

webName:"先思考后编码",

age:undefined,

func:function(){},

sy:Symbol("前端教程")

}

console.log(JSON.stringify(antzone));

```

可以看到值为上述三种类型的属性直接被无视了。

如果上述三种类型的值作为数组成员,那么会被转换为null,代码如下:

```javascript

let arr=["先思考后编码",undefined,function(){},Symbol("前端教程")];

console.log(JSON.stringify(arr));

```

可以看到三种类型的数据,在数组中被转换成了null。

java json.stringify_JSON.stringify() 方法相关推荐

  1. java json的使用方法_JAVA编写JSON常用的三种方法

    JAVA编写JSON常用的三种方法 Szx • 2019 年 11 月 15 日 1.jsonlib需要引入的包也多,代码也相对多一些. 2.Gson:谷歌的 3.FastJson:阿里巴巴的,这几个 ...

  2. java $.getjson_JQuery 获取json数据$.getJSON方法的实例代码

    jQuery系列 第八章 jQuery框架Ajax模块 第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是A ...

  3. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  4. 浅谈 JSON.stringify 方法

    原文:浅谈 JSON.stringify 方法 一.前言 最近项目中,遇到需要将对象转换成字符串进行传递,上次写过一篇文章关于json字符串转换成json对象,json对象转换成字符串,值转换成字符串 ...

  5. JSON.parse和JSON.stringify方法

    JSON.parse() JSON.parse()方法将json字符串转化为Javascript值或对象. 语法 JSON.parse(text[,reviver]) 参数 text:要被解析成Jav ...

  6. JSON.stringify() 方法

    JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个 ...

  7. 使用Json出现java.lang.NoClassDefFoundError解决方法

    使用Json出现java.lang.NoClassDefFoundError解决方法 参考文章: (1)使用Json出现java.lang.NoClassDefFoundError解决方法 (2)ht ...

  8. JS中的JSON.Stringify 方法详解

    在大厂的前端面试过程中,JSON.Stringify常常被问到,那么能够熟练的运用,掌握就必不可少. 那么,到底什么是 JSON.stringify 方法? 方法基本介绍 JSON.stringify ...

  9. 带你一起实现 JSON.Stringify 方法

      JSON.Stringify方法能够站在全局考察对 JS 各种数据类型理解的深度,对各种极端的边界情况处理能力,以及JS的编码能力.之所以将这篇作为这一模块的进阶,是因为想把整个数据类型的知识点串 ...

  10. java反射实现自定义json转对象方法-忽略字段大小写、字段个数

    java反射实现自定义json转对象方法-忽略字段大小写.字段个数 开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不 ...

最新文章

  1. stg游戏c语言,坦克大战改版
  2. 越小越好:为什么电子器件都这么小巧玲珑?
  3. python如何获取信息_如何使用Python获取系统信息?
  4. [YTU]_2919( Shape系列-5)
  5. Windows驱动开发学习笔记(三)—— 内核空间内核模块
  6. .NET 5 中的隐藏特性
  7. linux网络配置命令 ifconfig 、route 、ip 、ip route
  8. (10)FPGA与ASIC区别
  9. linux 系统自动挂起,linux 系统挂起
  10. PHP手机获取6为不反复验证码
  11. 关于腾讯云redis 无法外网访问的解决方案
  12. (一)音视频:解码H264文件流程 渲染和拿到解码后源数据YUV 完整Demo
  13. arcgis更改字段名_了解字段属性、别名和表显示选项
  14. 静态类型语言、动态类型语言、强类型定义语言、弱类型定义语言、编译型语言、解释型语言...
  15. js实现农历时间代码
  16. js清除cookies
  17. 如何用分布式Pollard-Rho法对椭圆曲线离散对数问题(ECDLP)进行攻击(下)
  18. raster包—projectRaster函数
  19. MySQL数据库进阶知识
  20. 2017年北京邮电大学计算机考研机试试题及答案

热门文章

  1. 大学生体育运动网页设计模板代码 校园篮球网页作业成品 学校篮球网页制作模板 学生简单体育运动网站设计成品...
  2. Java判断合数或素数
  3. CR网络和主网络的认知无线电切换算法
  4. 软件测试工具都有哪些
  5. 新春活动策划案例(共31份)
  6. App 版本更新 versionUpdate
  7. 2021 年百度之星·程序设计大赛 - 初赛二
  8. db9针232接口波特率标准_9针RS232-422-485接口定义
  9. 写给非网工的CCNA教程(8)跨LAN的通信
  10. 第一课----色彩构成与色彩模式