JSON
JSON对象
JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。
JSON的规则很简单:对象是一个无序的“‘名称:值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
规则如下:
1)映射用冒号(“:”)表示。名称:值
2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
4) 并列数据的集合(数组)用方括号(“[]”)表示。
[
{名称1:值,名称2:值2},
{名称1:值,名称2:值2}
]
5) 元素值可具有的类型:string, number, object, array, true, false, null
JSON 示例
JSON 用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。
对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。
1、传统方法和JSON比较
1 <script type="text/javascript"> 2 //2、使用json格式来定义对象 3 var p ={ 4 "id":1118, 5 name:"小胜",//这里值的双引号不能省略,而键的双引号可以省略 6 gender:"男" 7 } 8 alert(p.id+p.name+p.gender); 9 10 11 /*//1、传统方式下js定义类 12 function person(id,name,gender){ 13 this.id = id; 14 this.name = name; 15 this.gender = gender; 16 } 17 //传统方式下定义对象 18 var p0 = new person(18,"hacket","男"); 19 //显示该用户信息 20 alert(p0.id+p0.name+p0.gender);*/ 21 </script>
2、多个json对象建立
1 <script type="text/javascript"> 2 var p =[//1、定义多个对象,用[]方括号,多个对象之间用逗号(,)隔开,最后一个不用逗号 3 4 {id:1,name:"hacket1",gender:"男1"}, 5 {id:2,name:"hacket2",gender:"男2"}, 6 {id:3,name:"hacket3",gender:"男3"} 7 ] 8 for(var i=0;i<p.length;i++){//2、通过p[i].id来调用某一个对象的值 9 window.alert(p[i].id+":"+p[i].name+":"+p[i].gender); 10 } 11 </script>
3、一个对象中有1个对象有多个对象
1 var p = { 2 "province":[ 3 {"city":"广州"}, 4 {city:"佛山"}, 5 {city:"江门"} 6 ] 7 }; 8 alert("我去过:"+p.province[2].city);
4、一个对象中有多个对象有多个对象
1 var p = { 2 "province1":[ 3 {city:"长沙"}, 4 {city:"衡阳"}, 5 {city:"永州"} 6 ], 7 "province2":[ 8 {city:"广州"}, 9 {city:"江门"}, 10 {city:"深圳"} 11 ] 12 }; 13 alert(p.province1[1].city); 14 alert(p.province2[1].city);
5、精简版
1 var p = { 2 "province":["广州","深圳","佛山"] 3 } 4 alert(p.province.length); 5 alert(p.province[1]);
总结:
数值型、布尔型和key不需要双引号,值需要双引号
一个大括号{}代表一个对象,多个对象用[]括号
解析 JSON
JSON 只是一种文本字符串。它被存储在 responseText 属性中
为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 函数。
函数 eval 会把一个字符串当作它的参数。然后这个字符串会被当作 JavaScript 代码来执行。因为 JSON 的字符串就是由 JavaScript 代码构成的,所以它本身是可执行的
代码实例:
使用第三方工具解析 JSON
1 import java.util.ArrayList; 2 import java.util.List; 3 4 import net.sf.json.JSONArray; 5 import net.sf.json.JsonConfig; 6 import cn.itcast.web.ajax.domain.Province; 7 8 //使用第三方工具将JavaBean或集合转成Json字符串 9 public class TestJson { 10 public static void main(String[] args) { 11 12 Province p1 = new Province(1,"广东省"); 13 Province p2 = new Province(1,"湖南省"); 14 Province p3 = new Province(1,"广西省"); 15 List<Province> provinceList = new ArrayList<Province>(); 16 provinceList.add(p1); 17 provinceList.add(p2); 18 provinceList.add(p3); 19 20 JsonConfig jsonConfig = new JsonConfig(); 21 //设置JavaBean在转换成JSON字符串时,不包含id属性 22 jsonConfig.setExcludes(new String[]{"id"}); 23 //通过JavaBean对象创建JSONArray对象 24 JSONArray jsonArray = JSONArray.fromObject(provinceList,jsonConfig); 25 //将JavaBean对象转成JSON格式字符串 26 String jsonString = jsonArray.toString(); 27 //显示 28 System.out.println(jsonString); 29 } 30 }
1 //省份[JavaBean] 2 public class Province { 3 private int id; 4 private String name; 5 public Province(){} 6 public Province(int id, String name) { 7 this.id = id; 8 this.name = name; 9 } 10 public int getId() { 11 return id; 12 } 13 public void setId(int id) { 14 this.id = id; 15 } 16 public String getName() { 17 return name; 18 } 19 public void setName(String name) { 20 this.name = name; 21 } 22 }
by hacket