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. GCJ-02火星坐标系和WGS-84坐标系转换关系

    GCJ-02火星坐标系和WGS-84坐标系转换关系 WGS-84:GPS坐标系 GCJ-02:火星坐标系,国测局02年发布的坐标体系,高德,腾讯等使用. BD-09:百度坐标系,百度自研,百度地图使用 ...

  2. 第一章 Java概述

    1.JAVA分类 JAVA SE:基础核心(面向对象.API.JVM...) JAVA ME:(游戏.通讯开发) JAVA EE(JSP/Sevlet\EJB\服务开发.企业应用)   2.JAVA语 ...

  3. numpy库补充 mean函数应用

    mean()函数功能:求取均值经常操作的参数为axis,以m * n矩阵举例: axis 不设置值,对 m*n 个数求均值,返回一个实数 axis = 0:压缩行,对各列求均值,返回 1* n 矩阵 ...

  4. notes for python简明学习教程(1)

    print总是以(\n)作为结尾,不换行可以指定一个空 end='' 字符串前面+r, 原始字符串 \ 显示行连接 input()函数以字符串的形式 返回键入的内容 函数参数, 有默认值的形参要放在形 ...

  5. Spring-Docker简易指南

     使用代码:https://files.cnblogs.com/files/miracle9527/demo4springboot.rar # 约定#为注释行.$为命令行 # 开始操作前将demo4s ...

  6. UI分层中使用PageFactory

    基于原PO设计模式,需要改变原有的从文件中读取文件,更改为PageFactory模式.做出如下改动: 1 2 public MsysPage(DriverBase driver) { super(dr ...

  7. DWM1000 Blink结构 -- 帧过滤第一节

    DWM1000 帧结构分析主要学习DWM1000 帧过滤功能,希望在目前DS-TWR定位系统中增加中断和帧过滤功能,帧过滤功能可以有效减少系统中的各个模块同时收发数据时的干扰问题,从而极大的提供系统稳 ...

  8. [HEOI/TJOI2016]序列

    Description: 给你一个序列,每个数可能变化为另一个数,每次最多有一个数变化 求最长的子序列,无论如何变化,这个子序列都不下降 Hint: \(n \le 10^5\) Solution: ...

  9. VB使用API进行RC4加密解密(MD5密钥)

    根据网络资料整改,来源未知,已调试通过. Option Explicit Private Declare Function CryptAcquireContext Lib "advapi32 ...

  10. python学习:元组和嵌套

    tuple(元组):只是可读,不可以修改# tup1 = () #空元组# tup2 = (20,) #元组内有一个元素,需要在元素后添加逗号 a = (1,2,3,4)print(a[1])a[1] ...