问题描述
我正在调用一个 Java 程序,该程序是我使用 Google OR Tools 编写的用于解决 VRP 的问题,并且我正在使用 child-process 从我的 Node JS 文件中调用该程序。目前我不得不将我的数据字符串化三次以获得预期的输出,昨天我只需要在 Node 和 Java 中使用相同的代码执行两次。我担心的是,如果我明天必须将数据字符串化四次会怎样。有没有更好的方法来字符串化每次都一致的数据,或者我做错了什么?
我有多个 JAR 文件,所有这些文件在字符串化一次或两次时都返回相同的响应,但在字符串化三次时工作正常。
节点JS代码:-
const childPorcess = exec('java -jar <PATH_TO_JAR_FILE> ' + JSON.stringify(JSON.stringify(JSON.stringify(data))),function(err,stdout,stderr) {
if (err) {
console.log(err)
}
console.log(JSON.parse(stdout))
})
我如何在 Java 中解析 :-
JSONObject data = (JSONObject) new JSONParser().parse(args[0]);
我的 JSON 对象:-
{
"locations": [
[30.795288,76.750204],[-30.795061,76.811813],[30.746093,76.844772],[30.783321,76.952143],[31.102846,77.021502],[32.154861,76.138451],[31.083183,76.516518],[30.147566,76.061848],[31.866464,77.586482],[32.286318,78.988468]
],"demands": [
0,1,3,6,8,1
],"vehicleCapacities" : [
40,40
],"vehicleNumber" : 2,"depot" : 0
}
预期的反应:-
"droppednodes": [],"Vehicle 2": [
0,1
],"Vehicle 1": [
0,7,2,4,9,5
],"Total distance": 129
当我字符串化一次或两次时收到错误
Exception in thread "main" Unexpected character (l) at position 1.
提前致谢!
编辑: 在与几个人、评论和一些专业人士讨论过这个问题后,问题似乎是由操作系统引起的(我使用的是 Windows)。在 mac OS 中使用它后,它在做了一些小的调整后工作。我们现在使用下面的方式来执行jar文件
response.data = await exec(`java -jar <PATH_TO_JAR> '${JSON.stringify(requestBody)}'`);
这仍然只适用于 Mac OS,我们还没有在 Linux 上检查过它,但对于 Windows,我仍然需要对其进行三次字符串化。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)