简单的json数组格式前台发送,后台解析

       一直对json数组格式的数据传递认知有点模糊,刚好工作需要用到了这方面的内容,所以花了点时间过来整理下,记录的过程也能更好地理顺一些东西。因为整理使用的过程中出了点小问题,所以就上网浏览了一些文章,下面是我个人认为还不错值得参考的几篇。

JAVA_Viterhttps://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);

但是由于限制我这边引入不了相关包,所以没有尝试第三种;第一种和第二种是可用的,需要的同学可以去测一下。如果有问题的话可以评论出来共同讨论共同进步。

上面的参考文章同学们不如去看一下,反正不要钱~~~~~~~
















  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值