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字符串的更多相关文章

  1. jQuery中json对象与json字符串互换

    json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj); 根据“|”把字符串变成数组.spli ...

  2. JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString

    JavaScript Json对象和Json对象字符串的关系 jsonObj<->JsonString 如下示例: 直接写的a1就是一个Json对象,a2 就是一个Json对象字符串; 通 ...

  3. 前端页面使用 Json对象与Json字符串之间的互相转换

    前言 在前端页面很多时候都会用到Json这种格式的数据,最近没有前端,后端的我也要什么都要搞,对于Json对象与Json字符串之间的转换终于摸清楚了几种方式,归纳如下! 一:Json对象转换为json ...

  4. js 将json对象转成字符串

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Json对象与Json字符串互转(转载)

    一.jQuery插件支持的转换方式 1 $.paseJSON(jsonstr);//将json字符串转换为json对象 二.浏览器支持的转换方式(Firefox,Chrome,Opera,Safair ...

  6. json对象和json字符串有啥区别啊

    json对象可以通过javascript存取属性!json对象装成json字符串经常用于前后台传输数据! 如果你在前台使用,那么Json对象可以通过xx.name来调用,如果是字符串,那么就是字符串了 ...

  7. json对象与json字符串互换

    json字符串转json对象:jQuery.parseJSON(jsonStr);                  /          var jsonObj= eval('(' + str + ...

  8. js 中 json对象 与 json字符串 间相互转换

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 JSON字符串:  var str1 = '{ " ...

  9. json对象和json字符串转换方法

    在WEB数据传输过程中,json是以文本,即字符串的轻量级形式传递的,而客户端一般用JS操作的是接收到的JSON对象,所以,JSON对象和JSON字符串之间的相互转换.JSON数据的解析是关键. 先明 ...

  10. JSON对象、JSON字符串的相互转换

    JSON对象.JSON字符串的相互转换 json的格式: 第一种方式: 单一的json字符串,转换成json对象时,需要 eval('(' + json + ')');这样的格式,中间需要加括号 va ...

随机推荐

  1. 史上最全的select加锁分析(Mysql)

    引言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * from table where id < ? s ...

  2. CF 552 Neko does Maths

    给出两个数a,b 求k     使得 a+k b+k有最小公倍数 a,b同时加上一个非负整数k,使得,a+k,b+k的最小公倍数最小 因为最小公公倍数=x*y / gcd(x,y),所以肯定离不开最大 ...

  3. webserver开发

    https://www.cnblogs.com/zakun/p/5387910.html

  4. AutoCAD下载

    AutoCAD 2019 64位破解版 附注册机和安装教程  1.71G AutoCAD 2019 64位精简优化版 珊瑚の海简体中文版691.08M

  5. Java 多文件压缩成一个文件工具类

    简单修改来自博客园勇闯天涯zfc的博客 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZIPUtil .java import jav ...

  6. h5、css3基础

    一.html(超文本标记语言) 作用:实现页面布局 页面由许多标记符号组成 由浏览器解释执行 二.html主题创建方式 !(英文状态)+tab html:4s+tab html:5+tab 三.标签 ...

  7. Java之hashCode的作用和equals方法的重构规则

    这个是博主对hashcode的初步理解,以后加深了会再来更新: 1.hashcode是什么? hashcode是对象的散列码,不同的对象几乎不一样,说几乎是因为还是可以一样的. 特点:每一个对象都有h ...

  8. Java_重载与重写

    在java中,重载与重写都是多态的体现.重载(Overload)体现的是编译时多态,而重写(Override)体现了运行时多态. 重载(Overload): 定义:在一个类中,同名的方法如果有不同的参 ...

  9. codeforces_Codeforces Round #541 (Div. 2)_abc

    A. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. java课程之团队开发冲刺阶段1.2

    一.总结昨天进度 1.三个任务都已经实现 2.使用时间:四个小时左右 二.遇到的困难 1.对Android原生的侧拉任务栏不了解,导致使用的时候出现了一部分问题 三.今天任务规划 1.对之前的程序重新 ...