JavaScript常见JSON操作实例分析


Posted in Javascript onAugust 08, 2018

本文实例讲述了JavaScript常见JSON操作。分享给大家供大家参考,具体如下:

1、JSON

JSON,JavaScript Object Notation)(JavaScript对象表示法) ,是存储和交换文本信息的语法,是基于JavaScript的一个子集。数据格式简单,易于读写,占用带宽小,类似 XML,但JSON 比 XML更小、更快,更易解析。

JSON不支持变量、函数、对象实例,只是一种数据的格式。数据在键值对中,数据由逗号分隔。

2、JSON数据类型

(1)简单数据类型:字符串、数值、布尔值,null(不支持JavaScript的 undefined)。

(2)对象:无序的键值对。

(3)数组:有序的值列表。

3、JSON对象与JavaScript对象的不同

(1)属性必须用双引号(最好不要用单引号,可能会出问题)。

(2)末尾无分号。

(3)不支持变量。

4、JSON数组与JavaScript数组的不同

(1)末尾无分号。

(2)不支持变量。

5、序列化

(1)JSON.stringify()方法

把JavaScript对象(JSON对象)序列化为JSON字符串的方法。默认情况下,输出的JSON字符串不包含任何空格字符或缩进,同时会忽略JavScript对象的函数和原型对象。

接收3个参数:过滤器、可选的过滤器(可以是函数,也可以是数组)、可选的字符串缩进数。

var person = {
  name: "Alice",
  age: 23,
  adult: true,
  friends: ["Bruce", "Cindy"]
};
var jsonText1 = JSON.stringify(person);//Date对象在序列化后变成了JSON字符串
var jsonText2 = JSON.stringify(person, ["name", "friends"]);//Date对象在序列化后变成了JSON字符串
var jsonText3 = JSON.stringify(person, function(key, value) {
switch(key){
  case "friends":
    return value.join("|");//按指定分隔符将数组连接成一个字符串
  case "age":
    return value + 1;
  case "adult":
    return undefined;//返回undefined则删除此属性
  default:
    return value;//其他值正常显示
  }
});
var jsonText4 = JSON.stringify(person, null, 4);
alert(jsonText1);//{"name":"Alice","age":23,"adult":true,"friends":["Bruce", "Cindy"]}
alert(jsonText2);//{"name":"Alice","friends":["Bruce", "Cindy"]}
alert(jsonText3);//{"name":"Alice","age":24,"friends":["Bruce|Cindy"]}
alert(jsonText4);
/*
{
  "name":"Alice",
  "age":23,
  "adult":true,
  "friends":[
    "Bruce",
    "Cindy"
  ]
}
*/

(2)toJSON()方法

作为stringify()方法中第2个参数过滤器的补充。stringify()有时不能满足某些对象进行自定义序列化的需求,则给对象定义toJSON()方法。

序列化对象的顺序:

  • 1)若存在toJSON()方法且能通过它取得有效的值,则调用这个方法。否则,返回对象本身。
  • 2)如果提供了第2个参数,应用此函数过滤器,传入函数过滤器的值是第1步返回的值。
  • 3)对第2步返回的每个值进行相应的序列化。
  • 4)如果提供了第3个参数,执行相应的格式化。
var person = {
  name: "Alice",
  age: 23,
  adult: true,
  friends: ["Bruce", "Cindy"],
  toJSON:function(){
    return {"name":"Alice","id":23,"friends":["Bruce", "Cindy"]};
  }
};
var jsonText1 = JSON.stringify(person);//Date对象在序列化后变成了JSON字符串
var jsonText2 = JSON.stringify(person, ["adult", "id", "friends"]);//Date对象在序列化后变成了JSON字符串
var jsonText3 = JSON.stringify(person, function(key, value) {
switch(key){
  case "friends":
    return value.join("|");//按指定分隔符将数组连接成一个字符串
  case "id":
    return value - 1;
  case "age":
    return value + 1;//返回undefined则删除此属性
  default:
    return value;//其他值正常显示
  }
});
var jsonText4 = JSON.stringify(person, null, 4);
alert(jsonText1);//{"name":"Alice", "id":23, "friends":["Bruce", "Cindy"]};
alert(jsonText2);//{"id":23,"friends":["Bruce", "Cindy"]}
alert(jsonText3);//{"name":"Alice","id":22,"friends":["Bruce|Cindy"]}
alert(jsonText4);
/*
{
  "name":"Alice",
  "id":23,
  "friends":[
    "Bruce",
    "Cindy"
  ]
}
*/

(3)eval()方法

把JSON字符串解析成JavaScript对象(JSON对象)的第一种方法。

var JSText = eval('(' + '{"name":"Alice", "friends":["Bruce", "Cindy"]}' + ')');
alert(JSText.friends);//Bruce,Cindy

注意:eval方法只能在非严格模式中进行使用,在use strict中是不允许使用这个方法的。

(4)jQuery.parseJSON()方法

把JSON字符串解析成JavaScript对象(JSON对象)的第二种方法。

需要先引入jQuery的js文件。

var JSText = jQuery.parseJSON('{"name":"Alice", "friends":["Bruce", "Cindy"]}');
alert(JSText.friends);//Bruce,Cindy

注意:从jQuery 3.0开始,不推荐使用jQuery.parseJSON()方法,要解析JSON字符串,请改用原生的JSON.parse()方法。

(5)JSON.parse()方法

把JSON字符串解析成JavaScript对象(JSON对象)的第三种方法。

接收2个参数:JSON字符串和可选的函数(在每个键值对上调用)。

eg1:

var JSText1 = JSON.parse('{"name":"Alice", "friends":["Bruce", "Cindy"]}');
var JSText2 = JSON.parse('{"name":"Alice", "friends":["Bruce", "Cindy"]}', function(key, value) {
  if (key == "friends")
      return value.join("&");
    else
      return value;
});
alert(JSText1.friends);//Bruce,Cindy
alert(JSText2.friends);//Bruce&Cindy

注意:第一个参数是JSON字符串,因此JSON对象需要用引号引住。

eg2:

var person = {
  name: "Alice",
  age: 23,
  birthday: new Date(1993, 12, 6)//保存了一个Date对象
};
var jsonText = JSON.stringify(person);//Date对象在序列化后变成了JSON字符串
alert(jsonText);//{"name":"Alice","age":23,"birthday":"1994-01-05T16:00:00:000Z"}
var JSText = JSON.parse(jsonText, function(key, value) {//解析在JSText中还原了Date对象,则JSText.birthdat属性中会保存一个Date对象
  if (key == "birthday")
    return new Date(value);
  else
    return value;
});
alert(JSText.birthday.getFullYear());//1994,已是Date对象,可以调用getFullYear()
Javascript 相关文章推荐
javascript中数组的定义及使用实例
Jan 21 Javascript
JQuery实现简单的图片滑动切换特效
Nov 22 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
Angular2的管道Pipe的使用方法
Nov 07 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
Feb 03 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
vue Cli 环境删除与重装教程 - 版本文档
Sep 11 Javascript
vue.js与后台数据交互的实例讲解
Aug 08 #Javascript
JS实现自定义弹窗功能
Aug 08 #Javascript
vue.js提交按钮时进行简单的if判断表达式详解
Aug 08 #Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 #jQuery
JS+HTML5实现获取手机验证码倒计时按钮
Aug 08 #Javascript
JS的Ajax与后端交互数据的实例
Aug 08 #Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 #jQuery
You might like
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
实例分析PHP中PHPMailer发邮件
2017/12/13 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
js文件中调用js的实现方法小结
2009/10/23 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
初步探究Python程序的执行原理
2015/04/11 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
护理专业个人求职简历的自我评价
2013/10/13 职场文书
法律专业应届本科毕业生求职信
2013/10/25 职场文书
班组长竞聘书
2014/03/31 职场文书
品酒会策划方案
2014/05/26 职场文书
异地恋情人节寄语
2015/02/28 职场文书
2015年采购员工作总结
2015/04/27 职场文书
《观潮》教学反思
2016/02/17 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python