json对象和json字符串
Javascript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号(单引号会导致语法错误)
与Javascript的对象字面量相比,JSON对象有两个地方不一样。首先,没有声明变量(JSON中没有变量的概念)。其次,没有末尾的分号(因为这不是Javascript语句,所以不用分号)。
JSON对象的属性必须加双引号。
JSON对象有两个方法:
stringify(),把Javascript对象序列化为JSON字符串
parse(),把JSON字符串解析为Javascript值
在默认情况下,JSON.stringify()输出的JSON字符串不包含任何空格字符串或是缩进。
在序列化Javascript对象时,所有函数及原型成员都会被忽略,不体现结果中,此外,值为undefined的任何属性也都会被跳过,结果中最终都是值为有效JSON数据类型的
实例属性。
var obj={
name:'Jack',
age:29,
school:{
name:'Middle School',
age:'',
location:undefined
}
}
var c = JSON.stringify(obj)
console.log(c)//{"name":"Jack","age":29,"school":{"name":"Middle School","age":""}}因为location的值是undefined,所以输出的值location已经过滤掉了
var d = JSON.parse(c);
一般情况下,d 与 obj 具有相同的属性,但是它们是两个独立的、没有任何关系的对象。
如果,传给JSON.parse()的字符串不是有效的JSON,该方法会抛出错误。
JSON的序列化选项
JSON.stringify()除了要序列化的Javascript对象外,还可以接受2个参数,这两个参数用于指定以不同的方式序列化Javascript对象。第一个参数是个过滤器,也可以是个函数;第二个参数是一个选项,表示是否在JSON中保留缩进。
var obj={
name:'Jack',
age:29,
school:{
name:'Middle School',
age:'',
location:undefined
}
}
var a = JSON.stringify(obj,["name","age"]) //如果参数是个数组,那么JSON.stringify()的结果中将只保留数组中列出的属性
console.log(a)//{"name":"Jack","age":29}
当第二个参数是一个函数的时候
var obj={
name:'Jack',
age:29,
school:{
name:'Middle School',
age:'',
location:undefined
}
}
var a = JSON.stringify(obj,function(key,value){ //相当于遍历对象
switch (key) {
case 'name':
return 'Jane'; //当key值为name的时候,返回的value值为Jane,注意,是对象里面所有key值为name,嵌套的也包括在内
break;
case 'age':
return value+1;//当keu值为age的时候,将原来的值+1
break;
}
return value
})
console.log(a)//{"name":"Jane","age":30,"school":{"name":"Jane","age":"1"}}
第三个参数
var obj={
name:'Jack',
age:29,
school:{
name:'Middle School',
age:'',
location:undefined
}
}
console.log(obj)
var a = JSON.stringify(obj,null,4)
console.log(a)
var b = JSON.stringify(obj,null,2)
console.log(b)
var c = JSON.stringify(obj,null,'---')
console.log(c)
对应的结果

toJSON()方法
var d=new Date();
var b = d.toJSON();
console.log(b)//2018-06-03T14:56:57.322Z
某些原生对象存在toJSON()方法。
toJSON()对象可以作为函数过滤器的补充。
把一个对象传入进JSON.stringify(),序列化的过程如下:
(1)如果存在toJSON()方法,而且能通过它取得有效的值,则调用方法。否则,调用本身。
(2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。
(3)对第(2)步返回的每个值进行相应的序列化。
(4)如果提供了第三个参数,执行相应的格式化。
解析函数
JSON.parse()方法也可以接收另一个参数,该参数是一个函数,将在每个键值对儿上调用。这个函数可以称为还原函数。
如果还原函数返回undefined,则表示要从结果中删除相应的键;如果返回其他的值,则将该值插入到结果中。在将日期字符串转换为Date对象时,经常要用到还原函数。
var obj={
name:'Jack',
age:29,
school:{
name:'Middle School',
age:'',
location:undefined
}
}
var a = JSON.stringify(obj)
var b =JSON.parse(a,function(key,value){
if(key == 'age'){
return value+1
}else if(key == 'name'){
return undefined
}else{
return value
}
})
console.log(b)

因为当key值为name的时候,返回的undefined,所以返回的新对象里面name属性被删掉。
json对象和json字符串的更多相关文章
- jQuery中json对象与json字符串互换
json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj); 根据“|”把字符串变成数组.spli ...
- JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString
JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...
- 前端页面使用 Json对象与Json字符串之间的互相转换
前言 在前端页面很多时候都会用到Json这种格式的数据,最近没有前端,后端的我也要什么都要搞,对于Json对象与Json字符串之间的转换终于摸清楚了几种方式,归纳如下! 一:Json对象转换为json ...
- js 将json对象转成字符串
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Json对象与Json字符串互转(转载)
一.jQuery插件支持的转换方式 1 $.paseJSON(jsonstr);//将json字符串转换为json对象 二.浏览器支持的转换方式(Firefox,Chrome,Opera,Safair ...
- json对象和json字符串有啥区别啊
json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ...
- json对象与json字符串互换
json字符串转json对象:jQuery.parseJSON(jsonStr); / var jsonObj= eval('(' + str + ...
- js 中 json对象 与 json字符串 间相互转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 JSON字符串: var str1 = '{ " ...
- json对象和json字符串转换方法
在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. 先明 ...
- JSON对象、JSON字符串的相互转换
JSON对象.JSON字符串的相互转换 json的格式: 第一种方式: 单一的json字符串,转换成json对象时,需要 eval('(' + json + ')');这样的格式,中间需要加括号 va ...
随机推荐
- dynamic动态类型的扩展方法
对于一个动态类型来说,你可以认为它包含任意成员,它们都能通过编译.但到了运行时,到底是否拥有这些成员,就真相大白了.如 dynamic test = ; Console.Write(test.Name ...
- 推荐学习git
龙恩博客http://www.cnblogs.com/tugenhua0707/p/4050072.html#!comments git命令大全https://www.jqhtml.com/8235. ...
- Saltstack 集中化管理平台安装
Saltstack的简介 SaltStack(http://www.saltstack.com/)是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的pupp ...
- 分分钟解决MySQL查询速度慢与性能差
阅读本文大概需要 6 分钟. 一.什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSecond意思是“每秒查询率”,是一台服务器每秒能够 ...
- LOJ.6435.[PKUSC2018]星际穿越(倍增)
LOJ BZOJ 参考这儿qwq. 首先询问都是求,向左走的最短路. \(f[i][j]\)表示从\(i\)走到\(j\)最少需要多少步.表示这样只会\(O(n^2\log n)\)的= =但是感觉能 ...
- hadoop ha zkfc 异常自动切换机制和hdfs 没有空间问题解决
在我搭建hadoop ha 后,我启动了各个功能,但是发现hadoop hdfs 没法使用,在web 页面也显示hdfs 可用空间为零,并且自动备份机制无法使用,本人也不理解,然后就是指定hdfs t ...
- Spark集群部署(standLone)模式
安装部署: 1. 配置spark为1个master,2个slave的独立集群(Standlone)模式, 可以在VMWare中构建3台运行Ubuntu的机器作为服务器: master主机配置如下: ...
- 使用Skaffold一键将项目发布到Kubernetes
当前skaffold版本为v0.4,还未发布正式版本,不建议在生产环境中使用: skaffold用于开发人员快速部署程序到Kubernetes中:skaffold提供了dev.run两种模式:使用sk ...
- docker 数据卷管理
在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...
- jenkins的sbt插件安装
在jenkins服务器手动安装sbt curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo mv bintray-sbt-rpm ...