空手道:如何将字符串中的对象/映射从javascript转换为Java?
我有一个名为production_2.json的json文件空手道:如何将字符串中的对象/映射从javascript转换为Java?,javascript,java,karate,Javascript,Java,Karate,我有一个名为production_2.json的json文件 [ { "v":{ "id":"rep_01564526", "name":"tuttoverde.pgmx", "type":"PRODUCTION_STARTED", "ute":"CD
[
{
"v":{
"id":"rep_01564526",
"name":"tuttoverde.pgmx",
"type":"PRODUCTION_STARTED",
"ute":"CDL",
"ver":"1.0",
"status":"EXE"
},
"ts":"2020-11-19T08:00:00Z"
},
{
"v":{
"id":"rep_01564526",
"name":"tuttoverde.pgmx",
"type":"PRODUCTION_ENDED",
"ute":"CDL",
"ver":"1.0",
"status":"EXE"
},
"ts":"2020-11-19T17:00:00Z"
}
]
还有那套愚蠢的空手道规则:
mqtt.sendMessage(payload, topic);
是java中的一个函数,具有以下性质
public Boolean sendMessage(String payload, String topic) {
System.out.println("Publishing message: ");
System.out.println("payload " + payload);
System.out.println("topic " + topic);
return true;
}
问题在于,javascript函数中的“有效负载”值是正确的,并且打印正确,而在“sendMessage”函数中,有效负载的值格式不正确
例如,下面是它在karate.log中打印的内容('payload:',payload)
这里是java类的函数“sendMessage”上打印的内容
payload {v={id=rep_01564526, name=tuttoverde.pgmx, type=PRODUCTION_STARTED, ute=CDL, ver=1.0, status=EXE, ts=2021-01-08T08:00:00Z}
我不明白为什么有效负载的格式不正确(=而不是:),而且它不是字符串。我也尝试过使用下面的解决方案,但它对我不起作用
* def sendtopics =
"""
function(i){
var topic = "data." + machineID + ".Production";
var payload = productions[i];
var payload2 = JSON.stringify(payload);
return mqtt.sendMessage(payload2, topic);
}
"""
如何将javascript中的对象转换为字符串,以便将其传递给java?您正在用空手道做一些非常高级的工作。我强烈建议您开始查看新版本(即将发布),您可以在此处找到详细信息: 原因是async和Java互操作有一些突破性的更改,并且有一些新的API-s可以在JS中调用
karate
对象来进行格式转换:
var temp = karate.fromString(payload);
和karate.log()
应该工作得更好,不会给你带来你抱怨的奇怪格式。在当前版本中,您可以尝试karate.toJson()
,如果这样可以实现预期的转换
考虑到您的高级使用,我建议您开始使用新版本,并就可能仍然需要的任何内容提供反馈。在这个问题上似乎有些混乱。问题似乎不是将JavaScript对象转换为字符串,真正的问题似乎是在Java中打印@RachidG我说的对吗?我希望java中的有效负载以字符串形式打印。e、 g.{“v”:{“id”:“rep_01564526”,“name”:“tuttoverde.pgmx”,“type”:“PRODUCTION_STARTED”,“ute”:“CDL”,“ver”:“1.0”,“status”:“EXE”},“ts”:“2021-01-08T08:00:00Z”}
* def sendtopics =
"""
function(i){
var topic = "data." + machineID + ".Production";
var payload = productions[i];
var payload2 = JSON.stringify(payload);
return mqtt.sendMessage(payload2, topic);
}
"""
var temp = karate.fromString(payload);