前后台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