一、基本的解释


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。

可以看到一个很明显的区别,一个用的是 {  }  ,一个最外面用的是 [  ]  ;