JavaScript对象编程之JSON对象


一、JSON与JS对象

1.什么是JSON

JSON(JavaScript Object Notation), JS对象表示法,是一种轻量级的数据交换格式。使用JavaScript语法来描述数据对象,但是 JSON 仍然独立于语言和平台,可以被任何编程语言读取以及作为数据格式传递。
JSON是目前服务端与客户端交换数据 服务端与客户端交换数据中使用 最为广泛的标准格式。
JSON只是一种数据格式

2.什么是对象

我们常说,万物皆对象,任何一个事物都可以看成是一个对象,然后进一步去分析他的属性和动作,属性转换成代码就是我们定义的对象类的参数,而动作就是我们写在类里的方法。

3.什么是JS对象

JS对象不等于JSON,JS对象 表示类的实例,不能用于数据传输,JS中的对象,可以理解成是一个键值对的集合,键是调用每个值的名称,值可以是基本变量,还可以是函数和对象。

4.JSON与JS对象对比

JSON只是一种使用JS对象格式的数据,并不是具体的实例对象,是跨平台跨语言传输数据的一种载体,不仅仅限于JS。

JSON对象JS对象
含义一种数据格式表示类的实例
传输可以跨平台、跨语言传输不能传输
格式1、键值对方式,key必须加双引号
2、值不能是方法函数、undefined、NaN
1、键值对方式,Key不需要加引号
2、值可以是函数、对象、字符串、数字等
  1. JSON
    ① 外层适用花括号{}包裹
    ② json 对象的属性名称和字符串值需要用双引号引起来
    ③ 键值对之间用逗号分割
    ④ 值不能是方法函数、undefined、NaN
{
	"brand" :"苹果",  //字符串
	"price" : 6799,   //数值型
	"supportDualSIM" : true,  //布尔型
	"supportNetwork" :[ "5G","4G","3G","2G"]  //数组
}
  1. JS对象
    ① 外层适用花括号{}包裹
    ②键值对方式,key不需要加引号
    ③ 键值对之间用逗号分割
    ④ 值可以是函数、对象、字符串、数字等
var phone = {
	brand :"苹果",  //字符串
	price : 6799,   //数值型
	supportDualSIM : true,  //布尔型
	supportNetwork :[ "5G","4G","3G","2G"]  //数组
}

二、JSON的创建与访问

1.创建JSON(两种格式)

  1. 对象格式
{
   "brand" :"苹果",  //字符串
   "price" : 6799,   //数值型
   "supportDualSIM" : true,  //布尔型
   "supportNetwork" :[ "5G","4G","3G","2G"]  //数组
}
  1. 数组对象格式
    ① 最外层用“ [ ] ”括起来(方括号保存数组)
    ② JSON保存在“ { } ”中(花括号保存对象)
    ③ 键需要用“ " " ”括起来(key要用双引号括起来)
    ④ 数组中的对象属性需要保持一致
    注意:区别与上面的对象格式,多了外层的方括号
[
	{
		"model": 'iPhone12 ',
		"brand" :'苹果',
		"price": 6799,
		"supportDualSIM": true,
		"supprtNetwork" : [ '5G', '4G','3G ','2G' ]
	},
	{
		"model": 'Mate X2 ',
		"brand" : '华为',
		"price": 17999,
		"supportDualSIM": true,
		"supprtNetwork" : [ '5G', '4G','3G ','2G' ]
	}
]

2.JSON的访问

可以使用点号(.),或中括号([])来访问 JSON 对象的值。
① 点号访问对象时,直接使用对象的 key 来访问, key 无须放在双引号中。
② 中括号访问对象时,key必须放在双引号或单引号中。

var Iphone =   {
	    "brand" :"苹果",  //字符串
	    "price" : 6799,   //数值型
	    "supportDualSIM" : true,  //布尔型
	    "supportNetwork" :[ "5G","4G","3G","2G"]  //数组
	}
console.log(Iphone)

在这里插入图片描述

三、JS对象的创建与访问

1.创建JS对象

① 外层适用花括号{}包裹
② key:value 键值对格式
③ 逗号分割
④ 值类型可以是常用的number、string、boolean、object、null

var iPhone12 = {
	    brand : '苹果',
	    price: 6799,
	    supportDualSIM: true,
	    supportNetwork :[ ' 5G','4G','3G ','2G '],
	    show:function(){  //函数
		    console.log(iPhone12.brand+"的价格是"+iPhone12["price"]);
	    }
}
iPhone12.show();

在这里插入图片描述

2.JS对象的访问与赋值

可以使用点号(.),或中括号([])来访问 JSON 对象的值。
① 点号访问对象时,直接使用对象的 key 来访问, key 无须放在双引号中。
② 中括号访问对象时,key必须放在双引号或单引号中。同上!

特点:JS对象可以先声明再赋值

var people = {};
people.name = "小红";

3.遍历JS对象

for in 循环遍历

var obj = {
	model: 'iPhone12 ' ,
	brand : '苹果',
	price: 6799,
	supprtNetwork:[ ' 5G','4G ','3G', '2G' ],
}
for ( var i in obj) {
	console.log("这是键:"+ i )  //输出:键
    console.log("这是遍历中错误的访问方式:"+obj.i)  // 输出:undefined
    console.log("这是值:"+obj[i])  // 输出:值
}

练习:遍历以下数据,按下图格式输出

var phones = [
	{
		model: 'iPhone12 ',
		brand :'苹果',
		price: 6799,
		supportDualSIM: true,
		supprtNetwork : [ '5G', '4G','3G ','2G' ]
	},
	{
		model: 'Mate X2 ',
		brand : '华为',
		price: 17999,
		supportDualSIM: true,
		supprtNetwork : [ '5G', '4G','3G ','2G' ]
	}
]

在这里插入图片描述

四、JSON与JS对象的转换

1.JSON转为JS对象

JSON.parse() 将JSON字符串转换为JS对象

 var str = '{"name":"小明" , "age" : 6}'
 var obj = JSON. parse( str)
 console.log(obj)

在这里插入图片描述

2.JS对象转为JSON

JSON.stringify() 将JS对象转换为可传输的JSON格式

var obj = {
	name: "小明",
	age:9,
}
var JSON_obj = JSON. stringify( obj)
console.log(JSON_obj )

五、JS对象的应用

1.统计数组中元素出现的次数

题目:统计数组中,每个元素出现的次数
在这里插入图片描述
① 先将prev初始化为对象(就是最后一行代码)
② 然后判断 当前属性cur 在prev对象中 是否已经存在(cur in prev)
③ 如果不存在就为当前属性赋初始值为 1
如果已经存在,就为当前属性对应的值 +1

var arr = [ 'a ','b ', 'a', 'a ', 'a', 'a', 'c ', 'b''d ', 'b ', 'e']
var result = arr.reduce( function ( prev,cur ) {
	if ( cur in prev) {
		prev[ cur]++
	}else {
		prev [ cur] = 1
	}
	return prev},{})

2.使用sort对JS对象进行排序

例如:这里有一个对象数组,我们需要通过年龄大小对数组中的对象进行排序。

var data = [
{ name: 'Alice ', age: 50 },
{ name: ‘Bob’ , age: 5 },
{ name: 'Cart ’ , age: 15 }
]

data.sort( function (a,b ) {
	return a.age - b.age  // 调用对象属性值
})

六、本节案例

题目:
更新待办事项程序,添加以下功能
① 每个事项应有两个属性,事项名和时间,以JS对象方式存储在数组中
② 查重功能改为仅对时间查重
③ 增加时间列显示
④ 修改功能需修改事项名和时间
⑤ 删除及修改功能的序号选择为自动生成的下拉框
在这里插入图片描述

参考代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="" type="text/javascript" charset="utf-8"></script>
		<style type="text/css">
			#box {
				font-size: 50px;
				margin: 0;
				text-align: center;
			}

			table {
				border-collapse: collapse;
				border: 0;
			}

			td {
				border: solid 1px black;
			}

			#item {
				width: 132px;
			}

			#time {
				width: 164px;
			}

			#delIndex {
				width: 102px;
			}

			#updateIndex {
				width: 104px;
			}

			#updateItem {
				width: 62px;
			}

			#updateTime {
				width: 62px;
			}
		</style>
	</head>
	<body>
		<span>待办事项</span>
		<input type="text" name="item" id="item" value="" />
		<br>
		<span>时间</span>
		<input type="text" name="time" id="time" value="" />
		<input type="button" name="add" id="add" value="添加" onclick="add()" />
		<br>
		<br>
		<span>删除第</span>
		<select id="delIndex">
			<option value="0"></option>
		</select>
		<span>个项目</span>
		<input type="button" name="" id="" value="删除" onclick="del()" />
		<br>
		<br>
		<span>修改第</span>
		<select id="updateIndex">
			<option value="0"></option>
		</select>
		<span>个项目</span>
		<br>
		<span>事项</span><input type="text" name="updateItem" id="updateItem" value="" />
		<span>时间</span><input type="text" name="updateTime" id="updateTime" value="" />
		<input type="button" name="" id="" value="更新" onclick="update()" />
		<div id="box"></div>
		<script>
			var toDoList = [];

			function add() {
				var newItem = document.getElementById("item").value;
				var time = document.getElementById("time").value;
				var obj = {}
				obj.activity = newItem
				obj.time = time

				var arr = []
				for (var i in toDoList) {
					arr.push(toDoList[i].time)
				}
				if (arr.indexOf(time) == -1) {
					toDoList.push(obj);
				}
				showList()
			}

			function showList() {
				var txt = ""
				txt += "<table><tr><th>序号</th><th>项目</th><th>时间</th></tr>"
				for (var i = 0; i < toDoList.length; i++) {
					txt += "<tr><td>" + (i + 1) + "</td><td>" + toDoList[i].activity + "</td><td>" + toDoList[i].time +
						"</td></tr>"
				}
				txt += "</table>"
				document.getElementById("box").innerHTML = txt;
				document.getElementById("item").value = "";

				var txt = ""
				for (var i = 1; i <= toDoList.length; i++) {
					txt += "<option value='" + i + "'>" + i + "</option>"
				}
				document.getElementById('delIndex').innerHTML = txt;
				document.getElementById('updateIndex').innerHTML = txt;
			}

			function del() {
				var index = document.getElementById('delIndex').value
				toDoList.splice(index - 1, 1)
				showList()
			}

			function update() {
				var index = document.getElementById('updateIndex').value
				var item = document.getElementById('updateItem').value
				var time = document.getElementById('updateTime').value
				var obj = {}
				obj.activity = item
				obj.time = time
				toDoList.splice(index - 1, 1, obj)
				showList()
			}
		</script>  
	</body>
</html>


本文章为学习资料,如有内容错误,敬请指正
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值