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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值