JSON和String对象的转化、在js中的传递

一、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 implements
ModelDriven{

    public Map dataMap = new HashMap() ;

    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) ;            //调用父类的方法
    }



你可能感兴趣的:(JavaEE)