前后台JSON傳值得一個問題和異常處理net.sf.json.JSONException: Unquotted string '"name"'


  項目中做導入的時候遇到個bug,用JSON.stringify()序列號json對象傳給后台;然后后台通過getPatameter()獲取值時,前台的英文引號變成了中文引號。

  原來代碼如下:(自己排查發現就算是英文的時候也是如此)

//提交事件
    $("#submitButton").bind("click",function(){ if($("#addForm").valid()){ var jsonStr = {}; $("#itemTable").find("input[lang='userAdd']").each(function(index,obj){ var nameAttr = $(obj).attr("id").trim(); var valueAttr = $('#'+nameAttr).combobox('getValue').trim(); if (valueAttr != "" && valueAttr != undefined) { jsonStr[valueAttr] = nameAttr; } }); var json = new Object(); json.name = "ss"; json.age = "12"; var data = JSON.stringify(json); var att = {}; att["password"] = $("#text_pwd").val(); att["organization"] = $("#text_organization").combotree("getValue"); $(this).attr("disabled","disabled"); Loading(true,"<s:text name='cems.soft.progress.handling'></s:text>");//遮罩提示
 $.doAjax({ url:'${basePath}/user/userAction_userAdd.do', data:{"data":data,"arrdata":JSON.stringify(att)}, async:true, success:function(responseText){

  在后台獲取時,前台的英文引號,在后台變成了中文引號,導致JSON解析出錯,報異常:net.sf.json.JSONException: Unquotted string '”ss”'

/** * 映射字段 */
    public void userAdd(){ log.info("用戶批量導入_PBEG"); this.msg=RESULT_FAIL; long startTime = System.currentTimeMillis();//獲取當前時間
        String initPassword = ""; File file = null; List<User> list = new ArrayList<User>(); List<UserCache> userCaches = new ArrayList<UserCache>(); List<String> failedFailName = new ArrayList<String>(); Organization default_org = null; try { String data = getRequest().getParameter("data"); String arrdata =getRequest().getParameter("arrdata"); JSONObject jsonData = JSONObject.fromObject(data); JSONObject jsonArrdata = JSONObject.fromObject(arrdata); String arrPassword = jsonArrdata.containsKey("password") ? jsonArrdata.getString("password") : ""; String arrOrganization = jsonArrdata.containsKey("organization") ? jsonArrdata.getString("organization") : "";

 

解決方案:

  經過幾次json轉換的嘗試,發現結果均是如此,所以最后決定采用注入的方式處理。

//提交事件
    $("#submitButton").bind("click",function(){ if($("#addForm").valid()){ var jsonStr = {}; $("#itemTable").find("input[lang='userAdd']").each(function(index,obj){ var nameAttr = $(obj).attr("id").trim(); var valueAttr = $('#'+nameAttr).combobox('getValue').trim(); if (valueAttr != "" && valueAttr != undefined) { jsonStr[valueAttr] = nameAttr; } }); var data = JSON.stringify(jsonStr); var att = {}; att["password"] = $("#text_pwd").val(); att["organization"] = $("#text_organization").combotree("getValue"); $(this).attr("disabled","disabled"); Loading(true,"<s:text name='cems.soft.progress.handling'></s:text>");//遮罩提示
 $.doAjax({ url:'${basePath}/user/userAction_userAdd.do', data:{"data":data,"arrdata":JSON.stringify(att)}, async:true, success:function(responseText){

  后台:采用注入方式

  private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } private String arrdata; public String getArrdata() { return arrdata; } public void setArrdata(String arrdata) { this.arrdata = arrdata; } /** * 映射字段 */
    public void userAdd(){ log.info("用戶批量導入_PBEG"); this.msg=RESULT_FAIL; long startTime = System.currentTimeMillis();//獲取當前時間
        String initPassword = ""; File file = null; List<User> list = new ArrayList<User>(); List<UserCache> userCaches = new ArrayList<UserCache>(); List<String> failedFailName = new ArrayList<String>(); Organization default_org = null; try { //String data = getRequest().getParameter("data"); //String arrdata =getRequest().getParameter("arrdata");
            JSONObject jsonData = JSONObject.fromObject(data); JSONObject jsonArrdata = JSONObject.fromObject(arrdata); String arrPassword = jsonArrdata.containsKey("password") ? jsonArrdata.getString("password") : ""; String arrOrganization = jsonArrdata.containsKey("organization") ? jsonArrdata.getString("organization") : ""; String excelPath = getServletContext().getRealPath(USEREXCELTEMPLATE_DOWNLOADPATH+USEREXCELTEMPLATE_FILE); file = new File(excelPath); if(!file.exists() && !file.isDirectory()){ this.msg = "readErr"; throw new IllegalStateException("用戶批量導入-->用戶導入臨時文件不存在!"); } List<UserExport> userExports = new ArrayList<UserExport>();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM