JSON.stringify() 和 JSON.parse() 的详细使用

JSON是什么?

首先JSON是一种数据格式,不是一种编程语言

曾经有一段时间,XML 是互联网上传输结构化数据的事实标准,Web服务的第一次浪潮很大程度上都是建立在 XML 之上的,突出的特点是服务器与服务器之间通信。但不少人认为 XML 过于繁琐、冗长。

随着Web服务的发展,尤其当 JSON 出现后,其与JavaScript类似的语法,以及与 XML 相比可以直接解析为 JavaScript 对象的优势,让 JSON 受到广大 JavaScript 开发人员的热烈欢迎,JSON 也就逐渐成了Web服务开发中交换数据的事实标准。

JSON对象的两个方法

JSON.stringify() ,把 JavaScript 对象序列化为 JSON 字符串。
JSON.parse(),把 JSON 字符串解析为原生 JavaScript 对象。

# JSON.stringify() 序列化 JavaScript 对象

var movie = {
  movieid: "10641",
  title: "哥斯拉",
  writers: ["迪安·德夫林", "罗兰·艾默里奇"],
  year: "1998"
}

JSON.stringify(movie)
// {"movieid":"10641","title":"哥斯拉","writers":["迪安·德夫林","罗兰·艾默里奇"],"year":"1998"}

还可以接收两个参数,用于指定不同的方式序列化 JavaScript 对象。

1、过滤结果

过滤参数是数组:

JSON.stringify(movie, ["title", "year"])
// {"title":"哥斯拉","year":"1998"}

过滤参数是数组,结果只返回数组中包含的属性。

过滤参数是函数:

JSON.stringify(movie, function(key, value){
  switch(key) {
    case "movieid":
      return undefined;
    case "writers":
      return value.join(',');
    default:
      return value;
  }
})

// {"title":"哥斯拉","writers":"迪安·德夫林,罗兰·艾默里奇","year":"1998"}

2、字符串缩进

JSON.stringify(movie, null, 4)

在这里插入图片描述

JSON.stringify(movie, null, "--")

在这里插入图片描述
3、toJSON()方法

var movie = {
  movieid: "10641",
  title: "哥斯拉",
  writers: ["迪安·德夫林", "罗兰·艾默里奇"],
  year: "1998",
  toJSON: function() {
    return this.title;
  }
}

JSON.stringify(movie)
// "哥斯拉"

4、序列化的内部顺序

  1. 如果存在 toJSON() 方法,而且能通过它取得有效值,则调用该方法。否则返回对象本身。
  2. 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是 第 ‘1’ 步返回的值。
  3. 对第 ‘2’ 步返回的每个值进行相应的序列化。
  4. 如果提供了第三个参数,执行相应的格式化。
var movie = {
  movieid: "10641",
  title: "哥斯拉",
  writers: {
    a: "迪安·德夫林",
    b: "罗兰·艾默里奇",
    c: "泰德·埃里奥特"
  },
  year: "1998",
  toJSON: function() {
    return this.writers;
  }
}

JSON.stringify(movie, ['a', 'c'], 4)

在这里插入图片描述

# JSON.parse() 解析 JSON 字符串

// 准备 json 字符串
var movie = {
  movieid: "10641",
  title: "哥斯拉",
  writers: ["迪安·德夫林", "罗兰·艾默里奇"],
  year: "1998",
  toJSON: function() {
    return this.writers;
  }
}

var jsonText = JSON.stringify(movie)
// 解析
JSON.parse(jsonText)

在这里插入图片描述

JSON.parse() 方法也可以接收另一个参数,该参数是一个函数

var movie = {
  movieid: "10641",
  title: "哥斯拉",
  writers: ["迪安·德夫林", "罗兰·艾默里奇"],
  year: "1998",
  releaseDate: new Date(1998, 5, 19)
}

var jsonText = JSON.stringify(movie)

var movieCopy = JSON.parse(jsonText, function(key, value) {
  if(key === 'releaseDate') {
    return new Date(value);
  }else {
    return value;
  }
})

alert(movieCopy.releaseDate.getFullYear())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值