思路:后台action要把传递到页面的属性封装到map中,然后封装好的数据将会被Struts2转换成JSON字符串。
1、action层的代码:
public class JsonAction extends ActionSupport{
private static final long serialVersionUID = 1L
private Map<String,Object>dataMap
private String key = "Just see see"
public String json() {
// dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
dataMap = new HashMap<String, Object>()
User user = new User()
user.setName("张三")
user.setPassword("123")
dataMap.put("user", user)
// 放入一个是否操作成功的标识
dataMap.put("success", true)
// 返回结果
return SUCCESS
}
public Map<String, Object>getDataMap() {
return dataMap
}
//设置key属性不作为json的内容返回
@JSON(serialize=false)
public String getKey() {
return key
}
}
2、配置aciton,在struts.xml中的写法如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="json" extends="struts-default,json-default" >
<action name="json" class="json.JsonAction" method="json">
<result type="json">
<!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
<param name="root">dataMap</param>
</result>
</action>
</package>
</struts>
3、最终的输出结果:
{"success":true,"user":{"name":"张三","password":"123"}}
4、用js来解析:使用现成的JSON.parse() 来解析即可。
JSON.parse() 方法可以将一个 JSON 字符串解析成为一个 JavaScript 值。
jsp中利用ajax传递的参数统一用request.getParameter('xxx')来获取参数如果是一个json数组,那么解析对象的时候用JSONArray接收就可以了。
/**
* 从json数组中得到相应java数组
* JSONArray下的toArray()方法的使用
* @param str
* @return
*/
public static Object[] getJsonToArray(String str) {
JSONArray jsonArray = JSONArray.fromObject(str)
return jsonArray.toArray()
}
public static void main(String[] args) {
JSONArray jsonStrs = new JSONArray()
jsonStrs.add(0, "cat")
jsonStrs.add(1, "dog")
jsonStrs.add(2, "bird")
jsonStrs.add(3, "duck")
Object[] obj=getJsonToArray(jsonStrs.toString())
for(int i=0i<obj.lengthi++){
System.out.println(obj[i])
}
}