JSON

1. json是什么
  * 它是js提供的一种数据交换格式,现在只是出现在js 中,例如把xml 转化为java对象

2. json的语法
  * {}:是对象!
    > 属性名必须使用双引号括起来!单引不行!!!
    > 属性值:
      * null
      * 数值
      * 字符串
      * 数组:使用[]括起来
      * boolean值:true和false

3. json 对象的格式
 1  var person = {"name":"zhangSan", "age":18, "sex":"male"};

alert(person.name + ", " + person.age + ", " + person.sex);

如果是字符串的话

2 var str = "{\"name\": \"zhangSan\", \"age\": 18, \"sex\": \"male\"}";

什么是转义字符,就是在字符串当中如果还想输入双引号或者是单引号,就需要转义一下
var person = eval("(" + str + ")");//通过这个方法可以把字符串转换为json 对象

alert(person.name + ", " + person.age + ", " + person.sex);

3 var str = "1 + 2";
    var sum = eval("(" + str + ")");
    alert(sum);//3

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'json2.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
<script type="text/javascript">
function createXMLHttpRequest() {
	try {
		return new XMLHttpRequest();//大多数浏览器
	} catch (e) {
		try {
			return ActvieXObject("Msxml2.XMLHTTP");//IE6.0
		} catch (e) {
			try {
				return ActvieXObject("Microsoft.XMLHTTP");//IE5.5及更早版本	
			} catch (e) {
				alert("哥们儿,您用的是什么浏览器啊?");
				throw e;
			}
		}
	}
}

window.onload = function() {
	// 获取btn元素
	var btn = document.getElementById("btn");
	btn.onclick = function() {//给按钮的点击事件上添加监听
		// 使用ajax得到服务器端响应,把结果显示到h3中
		//1. 得到request
		var xmlHttp = createXMLHttpRequest();
		//2. 连接
		xmlHttp.open("GET", "<c:url value='/AServlet'/>", true);
		//3. 发送
		xmlHttp.send(null);
		//4. 给xmlHttp的状态改变事件上添加监听
		xmlHttp.onreadystatechange = function() {
			//双重判断
			if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
				var text = xmlHttp.responseText;//它是一个json串
				// 执行json串
				var person = eval("(" + text + ")");
				var s = person.name + ", " + person.age + ", " + person.sex;
				document.getElementById("h3").innerHTML = s;
			}
		};
	};
};
</script>
  </head>
  
  <body>
  <%-- 点击按钮后,把服务器响应的数据显示到h3元素中 --%>
<button id="btn">点击这里</button>
<h1>JSON之Hello World</h1>
<h3 id="h3"></h3>

  </body>
</html>
public class AServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		 * 向客户端发送json串
		 */
		String str = "{\"name\":\"zhangSan\", \"age\":18, \"sex\":\"male\"}";
		response.getWriter().print(str);
		System.out.println(str);
	}
}

JSONgeshi转换器 转换成json格式_JSON

4. json与xml比较
* 可读性:XML胜出
* 解析难度:JSON本身就是JS对象(主场作战),所以简单很多
* 流行度:XML已经流行好多年,但在AJAX领域,JSON更受欢迎。

把Java对象转换成JSON对象

apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串。也可以把JavaBean转换成JSON字符串。

 

4.1 json-lib核心jar包

json-lib的核心jar包有: 

  1. json-lib.jar

json-lib的依赖jar包有:

  1. commons-lang.jar
  2. commons-beanutils.jar
  3. commons-logging.jar
  4. commons-collections.jar
  5. ezmorph.jar

 

4.2 json-lib中的核心类

在json-lib中只有两个核心类:

  1. JSONObject;
  2. JSONArray;

4.1 JSONObject

JSONObject类本身是一个Map,所以学习它很方便。

JSONObject jo = new JSONObject();
       jo.put("name", "zhangSan");
       jo.put("age", "18");
       jo.put("sex", "male");
       System.out.println(jo.toString());
//{"name":"zhangSan","age":"18","sex":"male"}

 

Person person = new Person("liSi", 18, "female");
       JSONObject jo = JSONObject.fromObject(person);
       把JavaBean对象转换成json
       System.out.println(jo.toString());

 

Map map = new HashMap();
       map.put("name", "wangWu");
       map.put("age", "81");
       map.put("sex", "male");
      
       JSONObject jo = JSONObject.fromObject(map);
        //把Map转换成JSON
       System.out.println(jo.toString());

 

String xml = "<person><name>zhaoLiu</name><age>59</age><sex>female</sex></person>";
       XMLSerializer serial = new XMLSerializer();
       JSONObject jo = (JSONObject)serial.read(xml);
        //把xml转换成JSON,这需要导入xom-1.1.jar
       System.out.println(jo.toString());

 

4.2 JSONArray

JSONArray本身是一个List,所以使用起来很方便。

JSONArray ja = new JSONArray();
       Person p1 = new Person("zhangSan", 18, "male");
       Person p2 = new Person("liSi", 23, "female");
       ja.add(p1);
       ja.add(p2);
      
       System.out.println(ja.toString());

 

Person p1 = new Person("zhangSan", 18, "male");
       Person p2 = new Person("liSi", 23, "female");
       List<Person> list = new ArrayList<Person>();
       list.add(p1);
       list.add(p2);
      
       JSONArray ja = JSONArray.fromObject(list);
        //把list转换成JSONArray
       System.out.println(ja.toString());

 

Person p1 = new Person("zhangSan", 18, "male");
       Person p2 = new Person("liSi", 23, "female");
       Person[] persons = {p1, p2};
      
       JSONArray ja = JSONArray.fromObject(persons);
//把数组转换成JSONArray    
       System.out.println(ja.toString());

 

5 JS解释服务器发送过来的JSON字符串

服务器发送过来JSON字符串后,客户端需要对其进行解析。这时客户端需要使用eval()方法对JSON字符串进行执行!但要注意,eval()方法在执行JSON时,必须把JSON字符串使用一对圆括号括起来。

var json = "{\"name\":\"zhangSan\", \"age\":\"18\", \"sex\":\"male\"}";
var person = eval("(" + json + ")");
alert(person.name + ", " + person.age + ", " + person.sex);