您的位置:首页 > 编程语言 > Java开发

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

2018-01-03 17:42 489 查看
首先在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 {

4000
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”),得到键值对的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json java 对象