一直对json数组格式的数据传递认知有点模糊,刚好工作需要用到了这方面的内容,所以花了点时间过来整理下,记录的过程也能更好地理顺一些东西。因为整理使用的过程中出了点小问题,所以就上网浏览了一些文章,下面是我个人认为还不错值得参考的几篇。
JAVA_Viter:https://www.cnblogs.com/java-viter-guojiaokun/p/5024617.html
qq_34131878:https://blog.csdn.net/qq_34131878/article/details/52994952
kymegg:https://blog.csdn.net/kymegg/article/details/50964581
前台代码:
<!--修改事件开始-->
function updateSentiment(){
var sentiment = $("#updateSentiment").val();//批量修改
if(sentiment != -1){
var datalist = [];
var arr=$('input[id=titleid]:checked');
if(arr.length <=0){
$("#updateSentiment").val(-1);
alert("请选择需要修改的数据");
return false;
}
$(arr).each(function(){
var updateId = new Object();
var t = $(this).siblings("span.mr-10").text();//信息当前值
if(t == '积极'){
updateId.oldSentiment = '2';
}else if(t =='消极'){
updateId.oldSentiment = '0';
}else{
updateId.oldSentiment = '1';
}
updateId.sentiment = sentiment;
updateId.id = $(this).val();//勾选信息的ID
datalist.push(updateId);
});
$.ajax({
url:path+"/motor/editField.php",
data:{'datalist':JSON.stringify(datalist),'type':'0'},//类型是为了区分操作
type : 'post',
async : false,
dataType : "text",
success:function(data){
console.log(data)
$("#updateSentiment").val(-1);
$(arrChk).each(function(){
$(this).attr("checked",false);
});
if(data == "success"){
alert("修改已生效!");
queryJsonList(1);
}else{
alert("系统错误,请稍后再试");
}
}
});
}
}
ps: JSON.stringfy();是将json转换成字符串的方法,
json字符串发往后台,接收到的形式为:
[{"oldSentiment":"1","sentiment":"2","id":"5b0e4db0d4c638d232ec6cae"},{"oldSentiment":"1","sentiment":"2","id":"5b0e4db0d4c638d232ec6caa"}]
后台接收:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.Iterator;
/**
* 修改字段
* @param request
* @return
*/
@RequestMapping(value="/editField.php",method={RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public String editField(HttpServletRequest request){
String list = request.getParameter("datalist");
String type = request.getParameter("type");
JSONArray jArray = JSON.parseArray(list); //将传过来的json字符串放入json集合(com.alibaba.fastjson.JSONArray)
Iterator it = jArray.iterator();
System.out.println(type+" @@@@@@@@"+list);
IData params = new DataMap();
int ret = 1;
if("0".equals(type)){
while(it.hasNext()){
JSONObject obj = (JSONObject)it.next();
String id = (String)obj.get("id"); //信息id
String oldSentiment = (String)obj.get("oldSentiment"); //信息当前情感
String sentiment = (String)obj.get("sentiment"); //修改后的情感
if(sentiment.equals(oldSentiment)){
continue;
}
params.put("id", id);
params.put("fieldName", "simNum");
params.put("simNum", Integer.parseInt(sentiment));
ret = monitorService.editEmo(params);
}
}
if(ret==0){
return "success";
}
return "error";
}
我这里使用的是阿里的com.alibaba.fastjson.JSONObject;所以要相当注意,json相关依赖的包别引入错了,如果交叉引入而由于两者间不能相互转换,会出现如下错误:
java.lang.ClassCastException: net.sf.json.JSONObject cannot be cast to com.alibaba.fastjson.JSONObject
如果使用 net.sf.json 则需要修改相应的转换方法:
JSONArray jsArray=JSONArray.fromObject(list); //将传过来的json字符串放入json集合(net.sf.json.JSONObject)
String id = (String)jArray.getJSONObject(0).get("id");
网上可能也还有其他方法,比如说引入 org.json的,写法如下:
JSONArray jsArray = new JSONArray(list);
但是由于限制我这边引入不了相关包,所以没有尝试第三种;第一种和第二种是可用的,需要的同学可以去测一下。如果有问题的话可以评论出来共同讨论共同进步。
上面的参考文章同学们不如去看一下,反正不要钱~~~~~~~