前后台JSON传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'

时间:2021-07-25 16:46:14

  项目中做导入的时候遇到个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 = "";
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传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'

解决方案:

  经过几次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>();

前后台JSON传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'

前后台JSON传值得一个问题和异常处理net.sf.json.JSONException: Unquotted string '"name"'的更多相关文章

  1. net&period;sf&period;json&period;JSONException&colon; java&period;lang&period;NoSuchMethodException

    在尝试将json对象转换为list时候出现了如下错误 Exception in thread "main" net.sf.json.JSONException: java.lang ...

  2. net&period;sf&period;json&period;JSONException&colon; There is a cycle in the hierarchy&excl;

    因为项目中使用了AJAX技术,jar包为:json-lib.jar,在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题: 如hibernate延迟加载错误,这都是些老问题了,一看就知 ...

  3. Java中net&period;sf&period;json包关于JSON与对象互转的问题

    在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介 ...

  4. Java中net&period;sf&period;json包关于JSON与对象互转的坑

    在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介 ...

  5. net&period;sf&period;json&period;JSONOBJECT&period;fromObject 与 com&period;alibaba&period;fastjson&period;JSONObject&period;parseObject

    文章待补充,先写写以下知识点好了. NULL值处理之 net.sf.json.JSONObject 和 com.alibaba.fastjson.JSONObject区别 JSON作为一个轻量级的文本 ...

  6. net&period;sf&period;json和 com&period;fasterxml&period;jackson中对象转json的区别

    近期做项目的时候,发现使用net.sf.json包中的JSONObject或JSONArray将对象转为json数据结构存在一个坑.当对String类型的属性赋值为null情况下,转为json结构为& ...

  7. net&period;sf&period;json JSONObject与JSONArray总结

    JSONObject:json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value} JSONArray:json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式 ...

  8. net&period;sf&period;json&period;JSONObject 和org&period;json&period;JSONObject 的差别

    http://my.oschina.net/wangwu91/blog/340721 net.sf.json.JSONObject 和org.json.JSONObject  的差别. 一.创建jso ...

  9. json解析异常 - net&period;sf&period;json&period;JSONException&colon; java&period;lang&period;reflect&period;InvocationTargetException

    注:在项目中, 我使用原生的ajax请求数据的时候, JSONObject没能帮我解析, 当却不给我报错, 我是在junit单元测试中测试的时候, 发现的.发现好多时候, 特别是通过ajax请求, 不 ...

随机推荐

  1. 带你玩转JavaWeb开发之六-mysql基本语法详解及实例&lpar;3&rpar;

    [语法] update 表名 set 列名=列值,列名=列值 -[条件]; [注意事项] * 修改的列的值需要与列的类型一致. * 修改的列的值的长度不能超过列的类型的最大长度. * 字符串类型和日期 ...

  2. LUA学习笔记三&&num;183&semi;时间等操作系统库

    1.构造时间 2.时间制定格式输出 3.计时器(闭包)os.difftime (t2, t1) 返回以秒计算的时刻 t1 到 t2 的差值. (这里的时刻是由 os.time 返回的值). 在 POS ...

  3. 微信封号浪潮再起 A货假代购还能在朋友圈泛滥多久&quest;

    你的微信朋友圈是不是很活跃?是不是被很多所谓的名品所包围?没错,这些很多都是A货或假代购的伎俩.如果xmyanke的微信朋友圈出现这些东东,我就会直接屏蔽他的朋友圈权限.具体方法是:打开他的微信详细资 ...

  4. nodejs2

    jade@1.11.0 严格注意缩进 extends layout block content h1= title p Welcome to #{title} - var a='abc'; p his ...

  5. lnmp的使用

    命令 1.状态管理 lnmp {start|stop|reload|restart|kill|status} 2.添加虚拟host lnmp vhost add

  6. &num;include &lt&semi;boost&sol;function&period;hpp&gt&semi;

    为atoi取别名fun,fun实质上是函数指针 #include <iostream> #include <boost/function.hpp> void main() { ...

  7. Android EditText获取焦点和失去焦点监听事件

    实现方法也很简单.那就是绑定OnFocusChangeListener事件.实现onFocusChange(View v, boolean hasFocus) 方法.第二个参数就是判断得到焦点或失去焦 ...

  8. springboot1&period;5&period;4 配置druid1&period;1&period;0&lpar;使用druid-spring-boot-starter&rpar;

    原文:https://github.com/x113773/testall/issues/11 ### Druid 最近发布了1.1.0 版本,并且提供了 [druid-spring-boot-sta ...

  9. Linux中安装字体

    Linux中安装字体 查看系统中的字体 fc-list 查看系统中的中文字体 fc-list :lang=zh将然后将字体文件拷贝到/usr/share/fonts/中 cp aa.ttl /usr/ ...

  10. WCF传输过大的数据导致失败的解决办法

    WCF传输过大的数据导致失败的解决办法   WCF服务默认是不配置数据传输的限制大小的,那么默认的大小好像是65535B,这才65KB左右,如果希望传输更大一些的数据呢,就需要手动指定一下缓冲区的大小 ...