Ajax接收json响应

  • json?
  •  Json和xml比较
  •  Ajax如何使用JSON
  •  Ajax接收json响应案例

什么是json?
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,而且它是基于JavaScript 的,这样就不需要单独的工具去解析。JSON本质上来说就是字符串,只不过有格式要求。
JSON有两种结构:

  •  “名/值”对的集合(A collection of name/value pairs)。在不同的语言中,它被理解为对象,结构,关联数组等 。

对象是一个无序的“名/值”对集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个“:” ;“名/值”对之间使用“,” 分隔:

如:{ "firstName": "Brett", "lastName":"McLaughlin", "email":"brett@newInstance.com" }

  •  值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组

数组是值(value)的有序集合。一个数组以“[”开始,“]”结束。值之间使用“,”分隔:

Json和xml比较

  •  可读性

JSON和XML的可读性可谓不相上下,XML略占上风。

  •  可扩展性

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

  •  编码难度

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

  •  解码难度

XML的解析得考虑子节点父节点关系,让人头昏眼花,而JSON的解析难度几乎为零。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的 API 或工具包。

  •  流行度

XML已经被业界广泛的使用,而JSON也开始崭露头角,在Ajax领域,JSON凭借自身的优势将取代XML。

Ajax如何使用JSON
1. 服务器端返回JSON相应的文本表示,如:
{“city” : “Hefei”, “province” : “Anhui”}
2. 客户端使用eval()函数将JSON文本转化为JavaScript对象:

注意,使用额外的圆括号可使eval()函数将来源输入无条件地视为表达式进行解析。
3. 然后从JavaScript对象中取得相应的值:

Bean转Json
User u = new User();
u.setAge(22);
u.setUsername("hzucmj");
u.setEnabled(true);

JSONObject json = JSONObject.fromObject(u);
System.out.println(json.toString());
//结果为:{"enabled":true,"username":"hzucmj","age":22}
List转Json
User u1 = new User();
u1.setAge(22);
u1.setUsername("hzucmj");
u1.setEnabled(true);

User u2 = new User();
u2.setAge(20);
u2.setUsername("ctf");
u2.setEnabled(true);

List<Object> list = new ArrayList<Object>();
list.add(u1);
list.add(u2);

JSONArray json = JSONArray.fromObject(list);
System.out.println(json.toString());
//结果为:[{"enabled":false,"username":"ctf","age":20},{"enabled":false,"username":"","age":0}]
Map转Json
HashMap<String, Comparable> map = new HashMap<String, Comparable>();
map.put("name", "hzucmj");
map.put("age", 22);
JSONObject json = JSONObject.fromObject(map);
System.out.println(json.toString());
//结果为:{"name":"hzucmj","age":22}

Ajax接收json响应案例
需求:
使用ajax和json技术实现以下功能,通过改变下拉框值修改下面表格中的信息。

所必须的包有:

  • commons-lang-2.4.jar
  • commons-logging-1.1.1.jar
  • json-lib-2.4-jdk15.jar
  • ezmorph-1.0.6.jar
  • commons-collections-3.2.1.jar
  • commons-beanutils-1.8.0.jar

jar包网盘分享地址:http://pan.baidu.com/s/1gfOs4Kj

显示页面
viewBook.html

控制器
ChooseBook.jsp

Javabean类
Book.java

服务类,数据库模拟

BookService.java

其中控制器ChooseBook.jsp可以用servlet代替:

注意:servlet需要在web.xml中配置