一、String转化成JSON对象
String moduleCase = "{\"test\":[{\"module\":\"Example\",\"caseList\":[\"example1\",\"example2\",\"example3\",\"example4\",\"example5\",\"example6\",\"example7\",\"example8\",\"example9\",\"example10\",\"example11\",\"example12\"]},{\"module\":\"NetWorkTest\",\"caseList\":[\"NetWorkTest1\",\"NetWorkTest2\",]},{\"module\":\"PedDukptTest\",\"caseList\":[\"PedDukptTest1\",\"PedDukptTest2\",]},{\"module\":\"PedKeyTest\",\"caseList\":[\"PedKeyTest1\",\"PedKeyTest2\",]},{\"module\":\"PedPinTest\",\"caseList\":[\"PedPinTest1\",\"PedPinTest2\",]},{\"module\":\"PedTest\",\"caseList\":[\"PedTest1\",\"PedTest2\",]},{\"module\":\"PedUtilsTest\",\"caseList\":[\"PedUtilsTest1\",\"PedUtilsTest2\",\"PedUtilsTest3\",\"PedUtilsTest4\",\"PedUtilsTest5\",\"PedUtilsTest6\",\"PedUtilsTest7\",\"PedUtilsTest8\",\"PedUtilsTest9\",\"PedUtilsTest10\",\"PedUtilsTest11\",\"PedUtilsTest12\"]},]}" ;
Module m ;
Case c ;
List caseList = null ;
List mList = new ArrayList() ;
JSONObject json = JSONObject.fromObject(moduleCase); //转化为JSON对象
logger.error("" + json.get("test")) ;
JSONArray testJarr = (JSONArray)json.get("test"); //通过JSONObject.get(key)可以得到JSONArray对象
logger.error("" + testJarr.size()) ;
for(int i = 0 ; i < testJarr.size() ; i ++){
JSONObject jobj = (JSONObject)testJarr.get(i) ; //JSONArray.get(index)可以得到JSON Object对象
m = new Module() ;
m.setId(String.valueOf(i));
m.setModuleName(String.valueOf(jobj.get("module")));
JSONArray caseJarr = (JSONArray)jobj.get("caseList") ;
caseList = new ArrayList() ; //清空caseList
for(int j = 0 ; j < caseJarr.size() ; j ++){
c = new Case() ;
c.setId(String.valueOf(j));
c.setCaseName(String.valueOf(caseJarr.get(j)));
caseList.add(c) ;
m.setCaseList(caseList);
}
mList.add(m) ;
}
二、JSON转化成String对象
moduleList = exeCompiler() ;
JSONArray jsonArray = JSONArray.fromObject(moduleList) ; //首先取得JSONArray对象
String jsonString = jsonArray.toString();
getRequest().setAttribute("jsonString", jsonString) ;
js页面中获取:
var testInfo="";
var name = "" ;
var cases = "" ;
var jsonString=<%=request.getAttribute("jsonString") %>; //取得action中传递的参数
for(var i = 0 ; i < jsonString.length ; i ++){ //通过循环列表输出得到JSONArray中的值
name = jsonString[i].moduleName ;
cases = getCases(name) ;
if(cases != ""){
testInfo += "{\"module\":\"" + name +"\",\"caseList\":["+ cases + "]}," ;
}
}
三、在JSP页面中将object作为string传送到后台
$("#analyResultId").click(function(){
if(check("ids") && scheIsInter("ids")){
$(this).attr('disabled','disabled');
var formData = new FormData(document.getElementById("formId")) ;
$.ajax({ //在编译器列表文本框处进行编译
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!analyResult.action",
data:formData,
processData : false, // 告诉jQuery不要去处理发送的数据
contentType : false, // 告诉jQuery不要去设置Content-Type请求头
dataType: "json",
success:function (data){
$(this).removeAttr('disabled') ;
if(data.errorMsg != null){
alert(data.errorMsg) ;
}else{
var jsonStr = JSON.stringify(data) ;
//data为JSONObject对象,需要将其转化为string对象才能作为request参数传递到后台;否则后台接收到的是【?dataMap=[object%20Object]】
var url = "${pageContext.request.contextPath}/manage/termtask!showAnalyResult.action?data="+jsonStr ;
showModalOrOpen(url);
}
}
}) ;
}
});
后台接收:
public String showAnalyResult(){
//此处只能通过getParameter接收,如果想通过getAttribute接收直接得到Object对象,那么需要在JSP页面中进行setAttribute处理
String mapStr = getRequest().getParameter("data") ;
Map dataMap = JSONObject.fromObject(mapStr); //可以直接将jsonstring转化为map类型,这里实在很方便;原以为需要将其装换为JSONObject之后再转换为java的Map类型
return "showAnalyResult" ;
}
四、在JSP页面中将string传递到后台后转化为Object
原来本想直接在js中将string转化为Object对象,然后传送到action
$(document).ready(function(){
$("#saveAnalyResultExcelId").click(function(){
var jsMap = document.getElementById("dataMapId").value ; //js是后台dataMap【Map类型】得到的值【String类型】
var dataMap = JSON.parse(jsMap) ; //想转化为JSONObject直接传送到后台
// dataMap = eval(" + (" + jsMap + ")");
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!saveAnalyResultExcel.action",
data:dataMap, //传送到后台时总是接收不到值,记得另一篇博文中TaskTemplet对象可以传送【http://blog.csdn.net/qq_21542377/article/details/77189634】
dataType:"json",
success:function(data){
alert(data) ;
}
});
});
}) ;
action接收:
public class TermtaskAction extends UpDownLoadAction
ModelDriven
public Map
public String getErrorMsg() {
return errorMsg;
}
public Map getDataMap() {
return dataMap;
}
public void saveAnalyResultExcel() throws Exception{ //dataMap 的值传递不进来
for(String key : dataMap.keySet()){
logger.error("key" + key + "-->" + dataMap.get(key));
}
logger.error("dataMap.get(webRltPath) || " + dataMap.get("webRltPath"));
String webRltPath = (String)dataMap.get("webRltPath") ; //取得绝对路径
File webRlt = new File(webRltPath) ;
downToTer(webRlt) ; //调用父类的方法
}
}
试了很多种可能后决定还是通过string传送,然后在后台转化为JSONObject接收,效果是一样的:
$(document).ready(function(){
$("#saveAnalyResultExcelId").click(function(){
var jsMap = document.getElementById("dataMapId").value ;
/* var dataMap = JSON.parse(jsMap) ;
dataMap = eval(" + (" + jsMap + ")"); */
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!saveAnalyResultExcel.action",
data:{
jsMap:jsMap
},
dataType:"json",
success:function(data){
alert(data) ;
}
});
});
}) ;
public void saveAnalyResultExcel() throws Exception{
logger.error("jsMap || " + jsMap); //接收string对象
dataMap = JSONObject.fromObject(jsMap) ; //转化为JSONObject
for(String key : dataMap.keySet()){
logger.error("key" + key + "-->" + dataMap.get(key));
}
logger.error("dataMap.get(webRltPath) || " + dataMap.get("webRltPath"));
String webRltPath = (String)dataMap.get("webRltPath") ; //取得绝对路径
File webRlt = new File(webRltPath) ;
downToTer(webRlt) ; //调用父类的方法
}