nashorn中js数组转为对象的问题

2023-05-25,,

背景

在项目中,使用jdk中的nashorn执行javascript脚本,例如如下脚本片段:

    let ctx = session.ctx;
ctx.confirm = {
//车牌划分后的数组
segments:[],
//正在确认第几段车牌
index:0
};
let provinceCity = {
value:ctx.province + ctx.citycode,
begin:0,
end:2
};
ctx.confirm.segments.push(provinceCity);
ctx.reply = '是' + provinceCity.value + '开头'; if(ctx.number){
let number = {
value:ctx.number,
begin:2,
end:2 + ctx.number.length
};
ctx.confirm.segments.push(number);
ctx.segmentSize = 2;
}else{
ctx.segmentSize = 1;
}

通过执行结果可以发现,segments变成了索引值为key的一个对象,这显然不是我们想要的结果:

{
"valid": false,
"confirm": {
"index": 0,
"segments": {
"0": {
"end": 2,
"value": "皖a",
"begin": 0
},
"1": {
"end": 5,
"value": "123",
"begin": 2
}
}
}
}

解决办法

通过google发现,这是nashorn中的算一个Bug,很多人都提出了相同的问题(https://github.com/intuit/karate/issues/225),其中有人给出了一个解决方案,就是在javascript脚本返回时,调用JSON.stringify(result),具体如下:

上述方法可以解决数组转为对象,亲测有效

nashorn中js数组转为对象的问题的相关教程结束。

《nashorn中js数组转为对象的问题.doc》

下载本文的Word格式文档,以方便收藏与打印。