json的Ajax使用

1.什么是Jackson?

 Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象
   和xml文档,同样也可以将json、xml转换成Java对象

2. jackson将java( JavaBean/Map)-->json
 javaBean(实体类)与map集合转换成字符串格式都是一样的:

里面的核心代码:

 ObjectMapper mapper = new ObjectMapper();
   mapper.writeValueAsString(obj);(由这个来使Java变成json的体现格式)

//实体类
		//对象
       Student stu1=new Student("o1", "lisi", null);
		ObjectMapper objectMap=new ObjectMapper();//核心词
		System.out.println(objectMap.writeValueAsString(stu1));//把stu转换成json体现形式
		
		//数组
		Student stu2=new Student("o2", "wangwu", null);
		List<Student> list=new ArrayList<>();
		list.add(stu1);
		list.add(stu2);
		System.out.println(objectMap.writeValueAsString(list));
		//混合
		Map<String,Object> map=new HashMap<String, Object>();
		map.put("tid","1");
		map.put("str",list);
		System.out.println(objectMap.writeValueAsString(map));
		
		System.out.println("----------------");
		//map集合
		//对象
		Map<String,Object> map2=new HashMap<>();
		map2.put("sid","o1");
		map2.put("sname","lisi");
		System.out.println(objectMap.writeValueAsString(map2));//把map转换成json体现形式
		//数组
		List<Map<String,Object>> list2=new ArrayList<>();
		Map<String,Object> map3=new HashMap<>();
		map3.put("sid","o2");
		map3.put("sname","wangwu");
		list2.add(map2);
		list2.add(map3);
		System.out.println(objectMap.writeValueAsString(list2));
		//混合
		Map<String,Object> map4=new HashMap<String, Object>();
		map4.put("tid","2");
		map4.put("str",list2);
		System.out.println(objectMap.writeValueAsString(map4));
		

结果如下:不管是JavaBean还是Map的三种转换格式都是一样的。

{"sid":"o1","sname":"lisi","set":null}
[{"sid":"o1","sname":"lisi","set":null},{"sid":"o2","sname":"wangwu","set":null}]
{"str":[{"sid":"o1","sname":"lisi","set":null},{"sid":"o2","sname":"wangwu","set":null}],"tid":"1"}
----------------
{"sname":"lisi","sid":"o1"}
[{"sname":"lisi","sid":"o1"},{"sname":"wangwu","sid":"o2"}]
{"str":[{"sname":"lisi","sid":"o1"},{"sname":"wangwu","sid":"o2"}],"tid":"2"}

   3.java->json死循环

      解决方法:
            3. 1. 忽略双向关联的一个方向即可

	Student stu1=new Student("o1", "lisi", null);
//		Student stu2=new Student("o2", "wangwu", null);
//		Teacher te1=new Teacher("1", "小哥", null);
//		Teacher te2=new Teacher("2", "袁哥", null);
//		Set<Teacher> set1=new HashSet<>();
//		set1.add(te1);
//		set1.add(te2);
//		stu1.setSet(set1);//一个学生里装两个老师
//		Set<Student> set2=new HashSet<>();
//		set2.add(stu1);
//		set2.add(stu2);
//		te1.setSet(set2);//一个老师里有两个学生(两边互相调用会进行死循环)
//		System.out.println(objectMap.writeValueAsString(stu1));//输出会出现栈异常

3. 2. 用 @JsonIgnore/程序控制一个属性

private String tid;
	private String tname;
	@JsonIgnore//这个类上面加这个符号
	private Set<Student> set=new TreeSet<>();

4.jQuery的ajax请求(与后台进行交互)

首先通过增强JsonBasedao来写那个dao方法  一个查询方法  然后在dao方法继承他 来进行对应的SQL处理  再通过servlet配置调用  之后就通过jsp页面访问

//获取数据源rs.getMetaData()  rs所有属性
                ResultSetMetaData md = rs.getMetaData();关键字
                //拿到它的count 多少列(sid,sname......)
                int count = md.getColumnCount();

@Override
			public List<Map<String,Object>> fore(ResultSet rs) throws SQLException, InstantiationException, IllegalAccessException {
				// TODO Auto-generated method stub
				List<Map<String,Object>> list=new ArrayList<>();
				//获取数据源rs.getMetaData()  rs所有属性
				ResultSetMetaData md = rs.getMetaData();
				//拿到它的count 多少列
				int count = md.getColumnCount();
				Map<String,Object> map=null;
				while(rs.next()) {
					map=new HashMap<String, Object>();
					//循环
					for (int i = 1; i <=count; i++) {
						//拿到每一个i的列名 后面是所有不同类型的值
						map.put(md.getColumnName(i),rs.getObject(i));
					}
				 	list.add(map);
				}
					return list;
				}
		});
public List<Map<String, Object>> list(Map<String,String[]> par,PageBean page) throws InstantiationException, IllegalAccessException, SQLException{
		String id = JsonUtil.getParam(par,"ID");//通过专门处理类调用方法处理数组结果集
		String sql="select * from t_address where true";
		if(StringUtils.isBlank(id)) {
			sql+=" and parent_id=7459";
		}else {
			sql+=" and parent_id="+id;
		}
		return super.execute(sql, page);	
	}


 专门用来处理json数据的工具包
	 * 从par拿到自己所需要用的查询维度 用来sql语句拼接
	 * @param par 获取从jsp页面传过来到后台的参数集合req.getparmMap
	 * @param key 某一个键
	 * @return
	 */
	public static String getParam(Map<String,String[]> par,String key) {
		if(par!=null && par.size()!=0) {
			//拿到一个键的值
			String[] var = par.get(key);
			 if(var!=null && var.length>0) {
				 //把它变成一个String数组[1,2,3]
				 String val = Arrays.toString(var);
				 //截取从数组第一个字到最后一个括号 -1去除后面括号
				 return val.substring(1,val.length()-1);
			 }
			 return "";
		}
		return "";
	}

jsp页面可直接调用那个js里面写的Ajax代码就能直接展现

这是一个三级联动的js  首先是程序入口 然后调用Ajax直接去掉那个url刷新 当点击一个值会进行局部刷新

$(function(){
	var i=$("#hi").val();
	$.ajax({
		url:i+"/add",//url拿到那个servlet里的方法对象
		success:function(data){//这里是字符串所有的属性值
			for(index in data){//遍历每一个 拿到这个id拼接他的option
				$("#province").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>");
			}
		},
		dataType:"json"//把类型变成json类型对象object
	});
	
	$("#province").change(function(){
		//当执行改变他的值的时候其他的要清空上次的内容 不然会叠加
		//属于这个option里第一位后面的全部remove
		$("option:gt(0)","#city").remove();
		$("option:gt(0)","#county").remove();
		$.ajax({//再发一次Ajax请求过去拿到这个id的所有option
			url:i+"/add?ID="+this.value,//url拿到那个servlet里的方法对象
			success:function(data){//这里是字符串所有的属性值
				for(index in data){
					$("#city").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>");
				}
			},
			dataType:"json"//把类型变成json类型对象object
        });
	});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值