这两天学的东西有点多,今天抽个时间写下来,以此作为激励,这两天学了json,ajax,jQuery

一、使用第三方的工具java转换为json类型

首先就是java类型转换为json对象,首先要导入第三方工具包:

准备导入第三方jar包:

》commons-beanutils-1.7.0.jar

》commons-collections-3.1.jar

》commons-lang-2.5.jar

》commons-logging-1.1.1.jar

》ezmorph-1.0.3.jar

》json-lib-2.1-jdk15.jar

转换的方法如下:

(1)JavaBean----->JSON

》JSONArray jsonArray = JSONArray.fromObject(city);

》String jsonJAVA = jsonArray.toString();

(2)List<JavaBean>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(cityList);

》String jsonJAVA = jsonArray.toString();

(3)List<String>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(stringList);

》String jsonJAVA = jsonArray.toString();

(4)Set<JavaBean>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(citySet);

》String jsonJAVA = jsonArray.toString();

(5)Map<String,Object>----->JSON

》JSONArray jsonArray = JSONArray.fromObject(map);

》String jsonJAVA = jsonArray.toString();

public static void javabean2Json()
{
City city = new City(1,"广州");
JSONArray jsonArray = JSONArray.fromObject(city);
String jsonJAVA = jsonArray.toString();
System.out.println(jsonJAVA);
//[{"id":1,"name":"广州"}]
} public static void list2json()
{
List<City> cityList = new ArrayList<City>();
cityList.add(new City(1,"广州"));
cityList.add(new City(2,"深圳")); Province province = new Province(1,"广东",cityList); //[{"id":1,"cityList":[{"id":1,"name":"广州"},{"id":2,"name":"深圳"}],"name":"广东"}]
JSONArray jsonArray = JSONArray.fromObject(province);
String jsonJAVA = jsonArray.toString();
System.out.println(jsonJAVA);
//List集合[{"id":1,"name":"广州"},{"id":2,"name":"深圳"}]
} public static void set2json()
{
Set<City> citySet= new HashSet<City>();
citySet.add(new City(1,"广州"));
citySet.add(new City(2,"深圳"));
JSONArray jsonArray = JSONArray.fromObject(citySet);
String jsonJAVA = jsonArray.toString();
System.out.println(jsonJAVA);
//[{"id":1,"name":"广州"},{"id":2,"name":"深圳"}]
}
public static void map2json()
{
List<City> cityList = new ArrayList<City>();
cityList.add(new City(1,"广州"));
cityList.add(new City(2,"深圳")); Map<String,Object> map = new HashMap<String,Object>();
map.put("total", cityList.size());//表示集合的长度
map.put("rows", cityList);//表示集合
/**
* [{"total":2,"rows":[{"id":1,"name":"广州"},{"id":2,"name":"深圳"}]}]
*/ JSONArray jsonArray = JSONArray.fromObject(map);
String jsonJAVA = jsonArray.toString();
jsonJAVA = jsonJAVA.substring(1,jsonJAVA.length()-1);
System.out.println(jsonJAVA);
//[{"id":1,"name":"广州"},{"id":2,"name":"深圳"}]
} public static void main(String[] args) {
// TODO Auto-generated method stub
// javabean2Json();
// list2json();
// set2json();
map2json();
}

注意的是这里json全是java格式,必须转换为javascript所支持的json格式.

注意:JS可以直接解析JSON格式的文本,前提是:该JSON必须采用JS格式书写的才行,如果该JSON是采用Java格式写的,必须使用eval()函数转换后,方可被JS解析,该eval("")函数接收一个字符串格式的内容。

二 、使用struts2自动将java对象转换为json

1)导入struts2的jar包,主要是一些核心包,

commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.5.jar
struts2-core-2.3.4.1.jar
xwork-core-2.3.4.1.jar

还有一个struts2对json支持的插件包:struts2-json-plugin-2.3.1.1.jar

2)配置web.xml

 <!-- 配置拦截器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

配置struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置struts2 -->
<!--<package name="checknode" extends="struts-default" namespace="/user">
<action name="check" class="cn.itcast.js_02.checkcode.CheckcodeAction" method="check">
</action>
</package>--> <package
name="province"
extends="json-default"
namespace="/"> <!-- 配置全局结果 -->
<global-results>
<result name="success" type="json"></result>
</global-results>
<action
name="findCityByProvince"
class="cn.itcast.js_02.provincecityarea.ProvinceCityArea"
method="findCityByProvince">
</action> <action
name="findAreaByCity"
class="cn.itcast.js_02.provincecityarea.ProvinceCityArea"
method="findAreaByCity">
</action>
</package> </struts>

3)javabean 代码:

package cn.itcast.js_02.provincecityarea;

public class Bean {

    private String province;
private String city; public Bean() {
// TODO Auto-generated constructor stub
} public String getProvince() {
return province;
} public void setProvince(String province) {
this.province = province;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
}
}

Action代码:

package cn.itcast.js_02.provincecityarea;

import java.util.ArrayList;
import java.util.List; import com.opensymphony.xwork2.ActionSupport; public class ProvinceCityArea extends ActionSupport { private Bean bean;
public void setBean(Bean bean) {
this.bean = bean;
}
public Bean getBean() {
return bean;
} public String findCityByProvince() throws Exception {
// TODO Auto-generated method stub
cityList = new ArrayList<String>();
if("湖北".equals(bean.getProvince()))
{
cityList.add("武汉");
cityList.add("孝感");
cityList.add("黄冈");
}else if("湖南".equals(bean.getProvince()))
{
cityList.add("长沙");
cityList.add("株洲");
cityList.add("岳阳");
cityList.add("湖南");
}else if("江西".equals(bean.getProvince()))
{
cityList.add("南昌");
cityList.add("南昌");
cityList.add("南昌");
cityList.add("南昌");
} //配置让struts2自动将List/Set/Map<String>转换为JSON文本
return this.SUCCESS;
} /**
* 通过城市查找区域
* @return
* @throws Exception
*/ public String findAreaByCity() throws Exception {
// TODO Auto-generated method stub
areaList = new ArrayList<String>();
if("武汉".equals(bean.getCity()))
{
areaList.add("AA");
areaList.add("BB");
areaList.add("CC");
}else if("南昌".equals(bean.getCity()))
{
areaList.add("DD");
areaList.add("EE");
areaList.add("FF");
}else if("长沙".equals(bean.getCity()))
{
areaList.add("GG");
areaList.add("HH");
areaList.add("II");
} //配置让struts2自动将List/Set/Map<String>转换为JSON文本
return this.SUCCESS;
} private List<String> cityList;
private List<String> areaList;
public List<String> getAreaList() {
return areaList;
}
public List<String> getCityList()
{
return this.cityList;
}
}

jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>struts2实现三级联查询</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">
-->
</head>
<body>
<select id="provinceID" style="width:111px">
<option>请选择省份</option>
<option>湖北</option>
<option>湖南</option>
<option>江西</option>
</select> <select id="cityID" style="width:111px">
<option>请选择城市</option>
</select> <select id="areaID" style="width:111px">
<option>请选择区域</option>
</select>
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript">
document.getElementById("provinceID").onchange = function()
{
var province = this[this.selectedIndex].innerHTML;
//清除之前的样式
var cityElement = document.getElementById("cityID");
cityElement.options.length = 1;
//当省份发生变化时,区域也会发生变化
var areaElement = document.getElementById("areaID");
areaElement.options.length = 1;
if("选择省份"!=province)
{
//NO1)
var ajax = createAjax();
//NO2)
var method = "POST";
var url = "${pageContext.request.contextPath}/findCityByProvince?time="+new Date().getTime();
ajax.open(method, url);
//NO3)
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//NO4)
var content = "bean.province="+province;
ajax.send(content);
//------------------------->等待
//NO5)
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4)
{
if(ajax.status == 200)
{
//NO6)返回JAVA
var jsonJAVA = ajax.responseText;
var p = eval("("+jsonJAVA+")");
var array = p.cityList;
var size = array.length;
for(var i=0;i<size;i++)
{
var city=array[i];
var option = document.createElement("option");
option.innerHTML = city;
cityElement.appendChild(option);
}
}
}
}
}
} document.getElementById("cityID").onchange = function()
{
var city = this[this.selectedIndex].innerHTML;
//清除之前的数据
var areaElement = document.getElementById("areaID");
areaElement.options.length = 1;
if("请选择城市"!=city)
{
//NO1)
var ajax = createAjax();
//MO2)
var method = "POST";
var url = "${pageContext.request.contextPath}/findAreaByCity?time="+new Date().getTime();
ajax.open(method,url);
//NO3)
ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//NO4)
var content = "bean.city="+city;
ajax.send(content); //----------------------等待
ajax.onreadystatechange = function()
{
//NO5)
if(ajax.readyState == 4)
{
if(ajax.status == 200)
{
//NO6)
var jsonJAVA = ajax.responseText;
var jsonJS = eval("("+jsonJAVA+")");
var array = jsonJS.areaList;
var size = array.length;
for(var i=0;i<size;i++)
{
var area = array[i];
var option = document.createElement("option");
option.innerHTML = area;
areaElement.appendChild(option);
}
}
}
}
} }
</script>
</body>
<form action="" enctype="application/x-www-form-urlencoded"></form>
</html>
在这中间出了一些问题,大部分是因为写错了方法名称或属性名例如:ajax.onreadystatechange
最后再附上源码地址:https://github.com/blench/js_day02.git

json与java对象的转换,以及struts2对json的支持,实现ajax技术的更多相关文章

  1. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  2. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  3. Json对象与Json字符串的转化、JSON字符串与Java对象的转换(转)

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  4. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  5. JSON与Java对象的互相转换

    JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do") @ResponseBody public JSONObject ...

  6. Json:Java对象和Json文本转换工具类

    Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类. 安装 下载源码 git clone https://github.com/njdi/durian.git 编译源码 cd ...

  7. Json与Java对象互转之Gson学习

    Json与Java对象互转之Gson学习 请尊重他人的劳动成果.转载请注明出处:Json与Java对象互转之Gson学习         我曾在<XML,Object,Json转换之浅析Xstr ...

  8. JSON和java对象的互转

    先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...

  9. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

随机推荐

  1. switch语句(下)(转载)

    之前我们介绍了在switch语句中使用整数类型和枚举类型的情况.这一部分继续介绍使用string类型的情况.string类型是switch语句接受的唯一一种引用类型参数. 下面来看一段C#代码. 代码 ...

  2. Fire Balls 05——坦克和子弹的制作以及炮台发射子弹

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  3. Android环境配置(Eclipse全开发环境下载)

    Android环境配置 前期准备 Android环境的Eclipse: 网站链接:https://www.runoob.com/w3cnote/android-tutorial-eclipse-adt ...

  4. 微信小程序那些令人眼泪汪汪的坑儿

    前言 最近做了一个麻雀虽小,五脏俱全的微信小程序项目.一看就会,一用就废的小程序.有些坑真的坑的你两眼泪汪汪.我就爱干前人栽树后人乘凉的事儿,看到文章的你,也许是同道中人,相视一笑:亦或是小程序外围人 ...

  5. hdu2222 Keywords Search (AC自动机板子

    https://vjudge.net/problem/HDU-2222 题意:给几个模式串和一个文本串,问文本串中包含几个模式串. 思路:贴个板子不解释. #include<cstdio> ...

  6. Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan(dfs+数学思想)

    题目链接:http://codeforces.com/contest/742/problem/C 题意:题目比较难理解,起码我是理解了好久,就是给你n个位置每个位置标着一个数表示这个位置下一步能到哪个 ...

  7. 美团2018年CodeM大赛-资格赛 分数 暴力模拟

    链接:https://www.nowcoder.com/acm/contest/138/D来源:牛客网 小胖参加了人生中最重要的比赛——MedoC资格赛.MedoC的资格赛由m轮构成,使用常见的“加权 ...

  8. 不权威的国产CPU发展历程

    最近进行了一些国产化相关工作 趁着周末有时间,自己整理一下这段时间的学习内容. 毕竟不是处理器和芯片的业内人士,里面多有纰漏,请谅解. 希望可以作为入门学习的简单知识. 1.0 远古时代 unix 世 ...

  9. Appium+python自动化(三十七)- 士兵突击许三多 - 多个appium服务启动,多个设备启动,多进程并发启动设备-并发测试 - 下(超详解)

    简介 接着上一篇继续看一下如何并发测试以及并发测试的过程中,可能遇到的问题,在这里宏哥把宏哥遇到的和小伙伴或者童鞋们,一起分享一下. Appium端口检测 问题思考 经过前面学习,我们已经能够使用py ...

  10. 花果山第一届猿类分级考试实录--Talk is cheap,Show me the code

    本故事纯属虚构,如有雷同,纯属巧合! 故事背景 悟空师徒4人取经回来后,因不耐收到管教,就回到了花果山,带领一帮猴子猴孙逍遥自在的过日子,奈何因在阎王殿里将生死薄中的猴子猴孙的名字都划去了,猴子猴孙是 ...