当前位置: 首页 > 编程日记 > 正文

JSON.stringify()

写在前边

不言而喻,JSON.stringify() 是用来将合法的JSON数据字符串化的!然而在正常的工作中我们用到的只是最基础的功能;今天我们就探索不一样的JSON.stringify()

基础用法

基本数据类型

JSON.stringify(2) // "2"
JSON.stringify("2") // ""2"" (含有双引号的字符串)
JSON.stringify(null) // "null"
JSON.stringify(true) // "true"
复制代码

所有安全的JSON值(JSON-safe)都可以使用JSON.stringify()字符串化。安全的JSON值是指能够呈现为有效JSON格式的值。

引用数据类型

对于引用数据类型来说,通常情况下和基本数据类型一样。但是引用数据类型中定义了toJSON()方法,JSON字符串化的时候就优先调用该方法,用它的返回值来进行序列化。

var a = [ 1 ];
a.toJSON = function () {return 'a'
}
JSON.stringify(a) // ""a""(含有双引号的字符串)
复制代码

tips: toJSON()应该返回是一个能够被字符串化的安全的JSON值,而不是返回一个JSON字符串

不同寻常的 JSON.stringify()

JSON.stringify.length // 3
复制代码

通过上述代码可以知道,JSON.stringify()函数有 3个 参数,通常大家用到的只是第一个,下边我们就依次来介绍下后边两个参数。

参数二(replacer)

replacer可以是数组或者函数,用来指定对象序列化过程中哪些属性应该被处理,和toJSON()很像。

数组

replacer是一个数组的情况下,那么它必须是一个字符串数组(数组中的非字符串值会被忽略)。

var a = { b: 2, c: '2', d: [1, 2, 3] }JSON.stringify(a, ['b', 'c']) // "{"b":2,"c":"2"}"
// 数组中包含非字符串值
JSON.stringify(a, ['b', 2]) // "{"b":2}"
复制代码

函数

如果 replacer 是一个函数,这个函数会有两个参数(key, value);该函数会对对象本身调用一次,然后对对象中每个属性各调用一次(深度遍历调用),如果要忽略某个属性就返回undefined,否则返回指定的值。

var a = { b: 2, c: '2', d: [1, 2, 3] }
JSON.stringify(a, function (key, value) {console.log('replacer')if (key !== 'c') return value
})
// 输出7次replacer
// "{"b":2,"d":[1,2,3]}"
复制代码

参数三(space)

space 用来指定输出的缩进格式。space为整数N时,则每一级会比上一级缩进N个空格;space为字符串S时,则每一级会比上一级缩进S

tips: N最大为10;S长度超过10位的话会取前十个字符

var a = { b: 2, c: '2', d: [1, 2, 3] }JSON.stringify(a, null, 4)// "{
//     "b": 2,
//     "c": "2",
//     "d": [
//         1,
//         2,
//         3
//     ]
// }"JSON.stringify(a, null, '----')// "{
// ----"b": 2,
// ----"c": "2",
// ----"d": [
// --------1,
// --------2,
// --------3
// ----]
// }"
复制代码

参考

  • 你不知道的js中卷
  • JSON.stringify()-MDN

转载于:https://juejin.im/post/5c96f7db5188252d7b5ca893

相关文章:

C++中前置声明介绍

前置声明是指对类、函数、模板或者结构体进行声明,仅仅是声明,不包含相关具体的定义。在很多场合我们可以用前置声明来代替#include语句。类的前置声明只是告诉编译器这是一个类型,但无法告知类型的大小,成员等具体内容。在未提供…

在Java SE中使用Hibernate处理数据

如今,Hibernate正在迅速成为非常流行的(如果不是最流行的)J2EE O/R映射程序/数据集成框架。它为开发人员提供了处理企业中的关系数据库的整洁、简明且强大的工具。但如果外部需要访问这些已被包装在J2EE Web应用程序中的实体又该怎么办&#…

利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)

作者 | Jose Garcia译者 | 吴振东校对 | 张一豪、林亦霖,编辑 | 于腾凯来源 | 数据派(ID:datapi)导读:本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲解…

开源软件License汇总

开源软件英文为Open Source Software,简称OSS,又称开放源代码软件,是一种源代码可以任意获取的计算机软件,这种软件的著作权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。 某…

前深度学习时代CTR预估模型的演化之路:从LR到FFM\n

本文是王喆在 AI 前线 开设的原创技术专栏“深度学习 CTR 预估模型实践”的第二篇文章(以下“深度学习 CTR 预估模型实践”简称“深度 CTR 模型”)。专栏第一篇文章回顾:《深度学习CTR预估模型凭什么成为互联网增长的关键?》。重看…

神器与经典--sp_helpIndex

每每和那些NB的人学习技术的时候,往往都佩服他们对各个知识点都熟捻于心,更佩服的是可以在很短时间找出很多业界大师写的文章和开发的工具,就像机器猫的口袋,让人羡慕嫉妒恨啊!宋沄剑宋桑就是其中之一,打劫其硬盘的念头已计划很久,只待时机成…

评分9.7!这本Python书彻底玩大了?程序员:真香!

「超级星推官/每周分享」是一个围绕程序员生活、学习相关的推荐栏目。CSDN出品,每周发布,暂定5期。关键词:靠谱!优质!本期内容,我们将抽1人送出由我司程序员奉为“超级神作”的《疯狂Python讲义》1本&#…

Caffe源码中caffe.proto文件分析

Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件,这里介绍下caffe.proto文件。在src/caffe/proto目录下有一个caffe.proto文件。proto目录下除了caffe.proto文件外,还有caffe.pb.h和caffe.pb.cc两个文件,此两个文件是根…

这套完美的Java环境安装教程,完整,详细,清晰可观,让你一目了然,简单易懂。⊙﹏⊙...

JDK下载与安装教程 2017年06月18日 22:53:16 Danishlyy1995 阅读数:349980版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012934325/article/details/73441617学习JAVA,必须得安装一下JDK(java dev…

【畅谈百度轻应用】云时代·轻应用·大舞台

云时代轻应用大舞台刘志勇君不见,上下班的地铁上,低头看手机;同事吃饭聊天,低头看手机;甚至朋友聚会,忙里偷闲打个招呼,然后继续低头看手机。正如微博上一个流传甚广的段子:“世界上…

如何画出高级酷炫的神经网络图?优秀程序员都用了这几个工具

(图片付费下载于视觉中国)作者 | 言有三 来源 | 有三AI(ID:yanyousan_ai)【导读】本文我们聊聊如何才能画出炫酷高大上的神经网络图,下面是常用的几种工具。1、NN-SVGNN-SVG 可以非常方便的画出各种类型的…

OpenBLAS简介及在Windows7 VS2013上源码的编译过程

OpenBLAS(Open Basic Linear Algebra Subprograms)是开源的基本线性代数子程序库,是一个优化的高性能多核BLAS库,主要包括矩阵与矩阵、矩阵与向量、向量与向量等操作。它的License是BSD-3-Clause,可以商用,目前最新的发布版本是0.…

技本功丨请带上纸笔刷着看:解读MySQL执行计划的type列和extra列

本萌最近被一则新闻深受鼓舞,西工大硬核“女学神”白雨桐,获6所世界顶级大学博士录取通知书。货真价值的才貌双全,别人家的孩子高考失利与心仪的专业失之交臂,选择了软件工程这门自己完全不懂的专业.即便全部归零,也要…

精美素材分享:16套免费的扁平化图标下载

在这篇文章中你可以看到16套华丽的扁平化图标素材,对于设计师来说非常有价值,能够帮助他们节省大量的时间。这些精美的扁平化图标可用于多种用途,如:GUI 设计,印刷材料,WordPress 主题,演示&…

Caffe源码中math_functions文件分析

Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件&#xff0c;这里介绍下math_functions文件。1. include文件&#xff1a;(1)、<glog/logging.h>&#xff1a;GLog库&#xff0c;它是google的一个开源的日志库&#xff0c;其使用可以参考&…

论文推荐 | 目标检测中不平衡问题算法综述

&#xff08;图片付费下载于视觉中国&#xff09;作者 | CV君来源 | 我爱计算机视觉&#xff08;ID&#xff1a;aicvml&#xff09;今天跟大家推荐一篇前几天新出的投向TPAMI的论文&#xff1a;Imbalance Problems in Object Detection: A Review&#xff0c;作者详细考察了目标…

php使用redis的GEO地理信息类型

redis3.2中增中了对GEO类型的支持&#xff0c;该类型存储经纬度&#xff0c;提供了经纬设置&#xff0c;查询&#xff0c;范围查询&#xff0c;距离查询&#xff0c;经纬度hash等操作。 <?php$redis new Redis(); $redis->connect(127.0.0.1, 6379, 60); $redis->au…

Caffe源码中syncedmem文件分析

Caffe源码(caffe version:09868ac , date: 2015.08.15)中有一些重要文件&#xff0c;这里介绍下syncedmem文件。1. include文件&#xff1a;(1)、<caffe/common.hpp>&#xff1a;此文件的介绍可以参考&#xff1a;http://blog.csdn.net/fengbingchun/article/detail…

免费开源!新学期必收藏的AI学习资源,从课件、工具到源码都齐了

&#xff08;图片付费下载于视觉中国&#xff09;整理 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;2019 年 3 月 28 日&#xff0c;教育部公布了 2018 年度普通高等学校本科专业备案和审批结果&#xff0c;共有 35 所大学新增了独立的人工智能专…

win7利用remote连接服务器,显示发生身份验证错误 要求的函数不受支持

先参考1&#xff1a; https://blog.csdn.net/qq_35880699/article/details/81240010 发现我根本没找到oracle修正的那个文件&#xff01; 然后我搜索&#xff1a;win7没有oracle修正文件&#xff0c;-------按照参考2中的链接操作&#xff0c;我发现我根本没有CredSSP文件&…

java参数传递:值传递还是引用传递

2019独角兽企业重金招聘Python工程师标准>>> 基本类型作为参数传递时&#xff0c;是传递值的拷贝&#xff0c;无论你怎么改变这个拷贝&#xff0c;原值是不会改变的&#xff1b; 在Java中对象作为参数传递时&#xff0c;是把对象在内存中的地址拷贝了一份传给了参数…

干货 | 收藏!16段代码入门Python循环语句

&#xff08;图片付费下载于视觉中国&#xff09;作者 | 李明江 张良均 周东平 张尚佳&#xff0c;本文摘编自《Python3智能数据分析快速入门》来源 | 大数据&#xff08;ID&#xff1a;hzdashuju&#xff09;【导读】本文将重点讲述for语句和while语句。for语句属于遍历循环&a…

Intel TBB简介及在Windows7 VS2013上源码的编译过程

Intel TBB(Intel Threading Building Blocks)是Intel线程构建块开源库&#xff0c;它的License是Apache 2.0.Intel TBB是一种用于并行编程的基于C语言的框架&#xff0c;它是一套C模板库。它提供了大量特性&#xff0c;具有比线程更高程度的抽象。Intel TBB可以在Windows、Linu…

react中ref的使用

在react中获取真实dom的时候就需要用到ref属性&#xff0c;具体使用如下 var MyComponent React.createClass({handleClick: function() {console.log(this.input)},render: function() {return (<div><input type"text" ref{(input) > {this.input in…

Caffe源码中blob文件分析

Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件&#xff0c;这里介绍下include/caffe/blob.hpp文件的内容&#xff1a;1. Include文件&#xff1a;(1)、<caffe/common.hpp>&#xff1a;此文件的介绍可以参考&#xff1a;http://…

jQuery之替换节点

如果要替换节点&#xff0c;jQuery提供了两个方法&#xff1a;replaceWith()和replaceAll()。 两个方法的作用相同&#xff0c;只是操作颠倒了。 作用&#xff1a;将所有匹配的元素都替换成指定的HTML或者DOM元素。&#xff08;摘自《锋利的jQuery(第二版)》P72&#xff09; 基…

比特大陆发布第三代AI芯片,INT8算力达17.6Tops

9月17日&#xff0c;福州城市大脑暨闽东北信息化战略合作发布会在数字中国会展中心隆重召开。本次发布会上&#xff0c;比特大陆正式推出了第三代AI芯片BM1684&#xff0c;同时也宣布BM1684将作为底层算力&#xff0c;赋能福州城市大脑&#xff0c;助力数字福州、数字中国的建设…

在 Azure 网站上使用 Memcached 改进 WordPress

编辑人员注释&#xff1a;本文章由 Windows Azure 网站团队的项目经理 Sunitha Muthukrishna 和 Windows Azure 网站开发人员体验合作伙伴共同撰写。 您是否希望改善在 Azure 网站服务上运行的 WordPress 网站的性能&#xff1f;如果是&#xff0c;那么您就需要一个可帮助加快您…

Caffe源码中io文件分析

Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件&#xff0c;这里介绍下include/caffe/util/io.hpp文件的内容&#xff1a;1. include文件&#xff1a;(1)、<google/protobuf/message.h>&#xff1a;关于protobuf的介绍可以参考&…

DeepMind悄咪咪开源三大新框架,深度强化学习落地希望再现

作者 | Jesus Rodriguez译者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】近几年&#xff0c;深度强化学习&#xff08;DRL&#xff09;一直是人工智能取得最大突破的核心。尽管取得了很多进展&#xff0c;但由于缺乏工具和库&#xff0c;DRL 方法仍…