在Java web中使用json

json包下载

  • 下载jar包当然是下大厂滴
    1. 推荐Alibaba的fastjson
    2. 推荐Google的gjson
  • 本文讲fastjson

https://github.com/alibaba/fastjson.git

json的常见格式

  • key - value 键值对
{"key":"value"}
  • 多个key - value对
{"key1":"value", "key2":"value"}
  • Java中的List集合
	  [
	   {"k1":"v1", "k2":"v2"},
	   {"k1":"v1", "k2":"v2"}
	  ]
  • Java中的map集合(字典)
	  {
	  		"key1": {"k1":"v1", "k2":"v2"},
	  		"key2": {"k1":"v1", "k2":"v2"}
	  }

fast-json包使用–Java中对象转换为json字符串

  • 先以学生实体类为demo
package com.lovely.entity;

import java.sql.Date;
import java.sql.Timestamp;

import com.alibaba.fastjson.annotation.JSONField;

public class Student {
	
	private Integer id;
	private String name;
	private Integer age;
	
	@JSONField(format="yyyy-MM-dd")
	private Date date;
	@JSONField(format="yyyy-MM-dd HH:mm:ss")
	private Timestamp time;
	
	public Student() {}
	
	public Student(Integer id, String name, Integer age, Date date,
			Timestamp time) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.date = date;
		this.time = time;
	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public Timestamp getTime() {
		return time;
	}
	public void setTime(Timestamp time) {
		this.time = time;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age
				+ ", date=" + date + ", time=" + time + "]\n";
	}

}

  • 把学生对象,list集合,map集合转换为json字符串
	// 对于有日期的在属性上加上注解!上面加了。
	static Student stu1 = new Student(1, "rye", 20, new Date(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()));
	static Student stu2 = new Student(2, "bitQian", 19, new Date(System.currentTimeMillis()), new Timestamp(System.currentTimeMillis()));
	
	/**
	 * 对象转换为json字符串 (有时间 日期的 加上@JSONField(format="yyyy-MM-dd") 注解)
	 * {"key1":"value", "key2":"value"}
	 */
	static void objToJson1() {
		// 对于日期的转型 字段要添加注解
		Object json = JSON.toJSONString(stu1, true);
		System.out.println(json);
	}
	
	/**
	 * 集合转成json字符串
	 * [
	 * 	{"k1":"v1", "k2":"v2"},
	 *  {"k1":"v1", "k2":"v2"}
	 * ]
	 */
	static String arrToJson2() {
		
		List<Student> list = new ArrayList<Student>();
		list.add(stu1);
		list.add(stu2);
		
		String json = JSON.toJSONString(list, true);
		System.out.println(json);
		
		return json;
		
	}
	
	/**
	 * map集合转换为json字符串
	 * {
	 * 		"key1": {"k1":"v1", "k2":"v2"},
	 * 		"key2": {"k1":"v1", "k2":"v2"}
	 * }
	 */
	static String mapToJson3() {
	
		Map<String, Student> map = new LinkedHashMap<>();
		
		map.put("stu1", stu1);
		map.put("stu2", stu2);
		
		String json = JSON.toJSONString(map, true);
		System.out.println(json);
		
		return json;
	}
  • json字符串转换为对象
	// 返序列化 把json字符串->student对象/集合对象/map字典对象
	static void jsonToObj1() {
		String json = JSON.toJSONString(stu1);
		Student obj = JSON.parseObject(json, Student.class);
		// 重写了student toString()
		System.out.println(obj);
	}
	
	static void jsonToArr2() {
		String json = arrToJson2();
		List<Student> list = JSON.parseArray(json, Student.class);
		System.out.println(list);
	}
	
	static void jsonToMap3() {
		String json = mapToJson3();
		Map<?, ?> map = JSON.parseObject(json, Map.class);
		System.out.println(map); 
	}
  • 测试map的json格式转换为map集合
public class Test1 {

	public static void main(String[] args) {
		// objToJson1();
		
		// arrToJson2();
		
		// mapToJson3();
		
		// jsonToObj1();
		
		// jsonToArr2();
		
		jsonToMap3();

	}

}
{
	"stu1":{
		"age":20,
		"date":"2020-07-10",
		"id":1,
		"name":"rye",
		"time":"2020-07-10 21:13:31"
	},
	"stu2":{
		"age":19,
		"date":"2020-07-10",
		"id":2,
		"name":"bitQian",
		"time":"2020-07-10 21:13:31"
	}
}
{stu1={"id":1,"time":"2020-07-10 21:13:31","name":"rye","age":20,"date":"2020-07-10"}, stu2={"id":2,"time":"2020-07-10 21:13:31","name":"bitQian","age":19,"date":"2020-07-10"}}

Ajax请求servlet,以json作为数据格式交互

  • 后台servlet
package com.lovely.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.lovely.entity.Student;

public class LoadDataServlet extends HttpServlet {

	/**
	 * @author echo lovely
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	
		String stuJson = "";
		
		/**
		 *三种json(object list map)对象的取值	
		 */
		String msg = req.getParameter("msg");
		
		Student stu1 = new Student();
		stu1.setId(1);
		stu1.setName("rye");
		stu1.setAge(20);
		
		Student stu2 = new Student();
		stu2.setId(2);
		stu2.setName("bitQian");
		stu2.setAge(19);		
		if ("object".equals(msg)) {
			stuJson = JSON.toJSONString(stu1);
		} else if ("list".equals(msg)) {
			ArrayList<Student> list = new ArrayList<Student>();
			list.add(stu1);
			list.add(stu2);
			stuJson = JSON.toJSONString(list);
		} else if ("map".equals(msg)) {
			HashMap<String,Student> map = new HashMap<String, Student>();
			map.put("stu1", stu1);
			map.put("stu2", stu2);
			stuJson = JSON.toJSONString(map);
		}
		
		// 响应json格式字符串
		resp.setContentType("text/json;charset=utf-8");
		
		PrintWriter out = resp.getWriter();
		
		out.print(stuJson);
		
		out.close();
		
	}

}

  • 页面Ajax请求
<html>
  <head>

    <title>My JSP 'list.jsp' starting page</title>

	
	<script type="text/javascript" src="js/jquery-3.2.1.js"></script>
	
	<script type="text/javascript"> 
		$(function() { // ready 函数...
			/*
			测试三种json(object list map)对象的取值		
			*/
			
			$("#btn1").click(function() {
				$.get(
					"LoadDataServlet",
					{
						"msg": "object"
					},
					function(data) {
						console.log(data);
						console.log(data.id + "\t" + data.name + "\t" + data.age);
					}
				);
			});
			
			$("#btn2").click(function() {
				$.get(
					"LoadDataServlet",
					{
						"msg": "list"
					}, 
					function(list) {
						console.log(list);
						// 遍历list json数组
						for (var i = 0; i < list.length; i ++) {
							console.log(list[i]);
						}
					}
				);
			});
			
			$("#btn3").click(function() {
				$.post(
					"LoadDataServlet",
					{
						"msg": "map"
					},
					function (data) {
						console.log(data);
						for (var stu in data) {
							console.log(data[stu].id + "\t" + data[stu].name + "\t" + data[stu].age);
						}
					}
				);
			});
		});
		
	</script>

  </head>
  
  <body>
    
    <!-- 测试三种json格式字符串 -->
    <input type="button" value="object" id="btn1"/>
    <input type="button" value="list" id="btn2"/>
    <input type="button" value="map" id="btn3"/>
  </body>
</html>

  • 单个student对象

  • list集合对象

  • map集合对象

  • 更新…

猜你喜欢

转载自blog.csdn.net/qq_44783283/article/details/107269085