今天学习了关于JSON的一些相关知识。
一、什么是JSON
JSON全称JavaScript Object Notation(JS对象标记),是一种轻量级的数据交换格式。它相对于XML更小、更易于人阅读和编写,同时也易于机器解析和生存,并有效地提高网络传输效率。
二、JSON数据格式
1、整体结构
String json1 = {"name" : "Jack","sex" : "男"}
String json2 = [{"name" : "Jack","sex" : "男"},{"name" : "Vincent","sex": "男"}]
2、JSON对象------左花括号({ )开头,右花括号(})结尾,一个键值对为一个属性
Json对象结构:{key1:value1,key2:value2...}
a)、key的数据类型:字符串
b)、value的数据类型:字符串、数值、null、json数组[]、json对象{}
3、JSON数组------类似数组或序列
JSON数组结构:[value1,value2......]
a)、value的数据类型:字符串、数值、null、json数组[]、json对象{}
语法规则:
1)、数据在名称/值中,为一个键值对,表示的是对象的属性
2)、除了最后一个属性或对象,每个属性,每个对象都必须用逗号(,)分隔
3)、花括号({})保存对象,一对花括号表示一个对象
4)、方括号([])保存数组,一对方括号表示一个数组
三、JSON的语法
1)、JSON对象
JSON对象是在花括号中书写的,对象中可以包含多个属性,多个属性之间用逗号(,)隔开。
格式:{"name":"Vincent","sex":"男"}
2)、JSON 对象的属性
JSON对象属性的书写格式为:名称:值,是一个键值对。官方规定,在JSON字符串中,JSON的Key值必须用双引号标起来,而不是单引号或无引号。
格式:"name":"Vincent"
3)、JSON数组
JSON对象中可以包含多个数组,用方括号([])将对象或属性包含在其中:
{ "user":[{ "name":"Vincent" , "sex":"男" }, { "name":"Jack" , "sex":"男" ,{ "name":"Tom" , "sex": "男" }]}
4)、JSON中使用JavaScript语法
通过JavaScript,创建一个JSON对象数组
var user = [{ "name":"Vincent" , "sex":"男" },
{ "name":"Jack" , "sex":"男" },
{ "name":"Tom" , "sex": "男" }];
四、JSON的解析
1、转换关系
服务端:Java对象(包括集合) → JSON字符串
客户端:JSON字符串 → Java对象(包括集合) or JSON字符串 → JS对象
注意:{"name":"Vincent"}该语句表示的是JSON字符串,而{name:"Vincent"}表示的是JSON对象。前者无法直接输出。
2、JSON字符串 和 JSON对象的区别
JSON字符串:仅仅是一个符合JSON格式的字符串,无法获取其属性值,类型为String
JSON对象:一个符合JS对象的JSON实例化对象,可以通过指定属性获取其值,类型为Object
3、JSON字符串 和 JSON对象的转换
a)、JSON字符串 转 JSON对象 ------ 调用JSON.parse()方法
<script type="text/javascript"> // json字符串 var user='{"name":"zzy","age":"19"}'; //json字符串强转为json对象 var userObj=JSON.parse(user); alert(userObj.name); </script>
b)、JSON对象 转 JSON字符串 ------ 调用JSON.stringify()方法
<script type="text/javascript"> //json对象 var userObj={"name":"zzy","age":"19"}; //json对象强转成json字符串 var user=JSON.stringify(userObj); alert(user); </script>
五、JSON对象 和 JSON字符串的语法规范
1、JSON对象语法规范:
<script type="text/javascript"> var user1={"name":"zzy","age":"19"}; var user2={"name":"zzy","age":"19"}; alert(user1==user2); </script>
结果:
原因:但实际上,我们每创建一个对象,都会创建一个存储区给对象,每个对象的实际地址在栈中是不一样的,所以两个对象之间彼此不相等。
2、JSON字符串语法规范
JSON字符串其实就是一个普通的字符同,不同的是他满足JSON的语法规范而已。官方规定JSON字符串的键值对必须都包括在冒号("")之中,这是一个用于识别JSON语句的语法规范。当字符串在没有反序列化时就是一个普通的字符串,所以加不加冒号都无所谓,但是当使用JSON.stringify()方法时,表示的是将JSON字符串序列化为JSON对象,此时如果字符串不符合JSON的语法规范则会报错。