一、基本的解释
JSON(JavaScript Object Notation, 有道翻译的意思是:JavaScript 对象表示法) 是一种轻量级的数据交换格式。
二、语法规则
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
1.JSON 名称/值对
"firstName" : "John"
2.JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
3.JSON 对象(JSONObject)
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
这一点也容易理解,与这条 JavaScript 语句等价:
firstName = "John"
lastName = "Doe"
4.JSON 数组(JSONArray)
JSON 数组在方括号中书写:
数组可包含多个对象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
[
{"userName":"zhangsan","address":"bj"},
{"userName":"lisi","address":"nj"}
]
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
三、JSON对象和JSON字符串的区别
JSON对象
有时候在做项目的时候时常将这两个概念弄混淆,尤其是在使用springmvc的时候,后台@RequestBody接受的是一个json格式的字符串,一定是一个字符串。
先介绍一下json对象,首先说到对象的概念,对象的属性是可以用:对象.属性进行调用的。例如:
var person={"name":"zhangsan","sex":"男","age":"24"}//json对象
alert(person.name);//zhangsan
alert(typeof person);//object
person就是json对象。可以用perosn.name这种方式进行属性的调用。第三行代码就是看person的类型,为object类型。
JSON字符串
字符串,我们常说的JavaScript中的字符串是单引号或者双引号引起来的。
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串
alert(person);//{"name":"zhangsan","sex":"男","age":"24"}
alert(typeof person);//string
person就是一个json字符串,之所以叫json字符串,因为字符串的格式符合json的格式,第三行代码也匹配其中的类型为string。
JSON字符串和JOSN对象的转换
json字符串转json对象,调用parse方法
json对象转为json字符串,调用stringify方法
<script type="text/javascript">
//jsonObject 转 Json字符串
var person={"name":"zhangsan","sex":"男","age":"24"};//json对象
var personString = JSON.stringify(person);
console.log(typeof personString);
console.log("--------------------------");
// Json字符串 转 jsonObject
var person='{"name":"zhangsan","sex":"男","age":"24"}';//json字符串
var personObject = JSON.parse(person);
console.log(typeof personObject);
console.log(personObject.name);//zhangsan
</script>
打印台输出结果:
"string"
"--------------------------"
"object"
"zhangsan"
SpringMVC接受json字符串类型。
在SpringMVC中基于REST开发时,前端传入后台的应该是一个json格式的字符串,而不是一个json对象
<script type="text/javascript">
$(document).ready(function(){
var saveDataAry=[];
var data1={"userName":"zhangsan","address":"bj"};
var data2={"userName":"lisi","address":"nj"};
saveDataAry.push(data1);
saveDataAry.push(data2);
$.ajax({
type:"POST",
url:"user/saveUser",
dataType:"json",
contentType:"application/json",
data:JSON.stringify(saveDataAry),
success:function(data){
}
});
});
</script>
面代码,首先push方法将其封装到数组中,其表现格式:
[
{"userName":"zhangsan","address":"bj"},
{"userName":"lisi","address":"nj"}
]
四、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如:
{ "id" : "123", "courseID" : "zhangyc-test", "title" : "提交作业", "content" : null }
JSONArray顾名思义是由JSONObject构成的数组,用 [ { } , { } , ...... , { } ] 来表示
例如:
[ { "id" : "123", "courseID" : "zhangyc", "title" : "提交作业" } , { "content" : null, "beginTime" : 1398873600000 "endTime" } ] ;
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个用的是 { } ,一个最外面用的是 [ ] ;