前后台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>();

原文地址:https://www.cnblogs.com/goloving/p/8027603.html