js中java中对json字符串、json对象、jsonArray的处理

5 篇文章 0 订阅
2 篇文章 0 订阅

首先在js中:

var jsonstr="[{'startTime':'00:00','endTime':'00:00','ifOnduty':0,'typeOnduty':0,'cordate':20180103,'employeeId':0,'scheduleTableId':0}]";

这就是简单的只有一个对象的json数组字符串。

var jsonarray = eval('('+jsonstr+')');

通过eval来解析json字符串,这里需要注意的地方就是要在jsonstr外加一个括号。

因为eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。简单讲就是参数必须是可执行的js脚本或者是js变量,如果是变量就返回变量值,如果是可执行的代码就执行代码。但不接收不可运行的js脚本作参数,其中{}就是之一。

为了让最外层的{}不要被eval理解成为Javascript的代码块的开始.而是理解成为一个对象字面量。

var arr  =
         {
                 "startTime" : startTime,
                 "endTime" : endTime,
                 "ifOnduty": ifOnduty,
                 "typeOnduty": typeOnduty,
                 "cordate": cordate,
                 "employeeId": employeeId,
                 "scheduleTableId": scheduleTableId
             }

        for(var i=0;i<jsonarray.length;i++){
            if(jsonarray[i].scheduleTableId==scheduleTableId){
                flag=true;
                index=i;
            }
        }

        if(flag==true){
            jsonarray[index].startTime=startTime;
            jsonarray[index].endTime=endTime;
            jsonarray[index].ifOnduty=ifOnduty;
            jsonarray[index].typeOnduty=typeOnduty;
            jsonarray[index].cordate=cordate;
            jsonarray[index].employeeId=employeeId;
        }else{
            jsonarray.push(arr);
        }

然后通过push来插入新的json对象,这里多的一个功能就是判断所要新增的json对象是否已经存在。

在java中对json的处理:

js部分代码:

function updateTable(){

        var jsonstring=JSON.stringify(jsonarray);

        $.ajax({
            url:"updateTableByEmployeeId",
            type:"post",
            data:{"jsonarray":jsonstring},
            success:function(msg){

            }
        });

    }

在传递到后台之前,将json数组通过stringify转换成json字符串,在通过ajax传递到后台。

后台代码:

@RequestMapping("updateTableByEmployeeId")
    public void UpdateScheduleTableByEmployeeId(String jsonarray){

        JSONArray jsonarr=JSONArray.fromObject(jsonarray);

        scheduleservice.updateTableByEmployeeId(jsonarr);

    }

这里需要注意的地方就是接受参数类型的设置,我一开始觉得他传递过来的是json数组字符串,所以用string[] jsonarray来接收参数,接收的参数看起来是json格式,是没什么问题,但是在java中通过fromObject转换成jsonArray时候回出现格式错误,从而导致无法找到json数组中的json对象。

其实,通过ajax传递过来的数据就是string类型的json字符串。可以通过fromObject方法转换成jsonArray

jsonArray中存放着许多对象,例:

[{"startTime":"00:00","endTime":"00:00","ifOnduty":0,"typeOnduty":0,"cordate":20180103,"employeeId":0,"scheduleTableId":0},{"startTime":"09:22","endTime":"18:00","ifOnduty":1,"typeOnduty":"2","cordate":"20180103","employeeId":"1024525831687730","scheduleTableId":"6180"}]

这里存放了两个对象,我用for循环对这个json数组进行遍历其中的对象,把两个json对象中对应的数据取出来存放到javaBean中,然后保存早数据库

for(int i=0;i<jsonarray.size();i++){
            ScheduleTable scheduleTable=new ScheduleTable();
            JSONObject job=jsonarray.getJSONObject(i);

            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            SimpleDateFormat sdf1 = new SimpleDateFormat("hh:mm");
            try {

                Date date=sdf.parse(job.getString("cordate"));
                Date startTime=sdf1.parse(job.getString("startTime"));
                Date endTime=sdf1.parse(job.getString("endTime"));

                scheduleTable.setDate(date);
                scheduleTable.setEmployeeId(job.getString("employeeId"));
                scheduleTable.setEndTime(endTime);
                scheduleTable.setIfOnduty(job.getString("ifOnduty"));
                scheduleTable.setStartTime(startTime);
                scheduleTable.setTypeOnduty(job.getString("typeOnduty"));
                scheduleTable.setScheduleTableId(job.getInt("scheduleTableId"));

                sTabledao.updateByTableId(scheduleTable);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //scheduleTable.setDate(jsonarray[i].cordate);
        }

在这里用的是jsonarray中的getJSONObject(i);,得到数组中第几个相应的对象,然后再通过get(“key”),得到键值对的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值