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<Termtask> implements
ModelDriven<Termtask>{

    public Map<String, Object> 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) ;            //調用父類的方法
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章