我有一个名为production\u 2.json的json文件
[
{
"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"
}
]
还有福林空手道守则:
读取文件production\u 2.json
并为数组的每个元素发送一个主题
I * def sendtopics =
"""
function(i){
var topic = "data." + machineID + ".Production";
var payload = productions[i];
karate.log('topic: ', topic )
karate.log('payload: ', payload )
return mqtt.sendMessage(payload, topic);
}
"""
* def productions = read('this:productions_json/production_2.json')
* def totalProductionEvents = productions.length
* def isTopicWasSent = karate.repeat(totalProductionEvents, sendtopics)
* match each isTopicWasSent == true
函数
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函数中的“payload”值是正确的,并且打印正确,而“sendmessage”函数中的payload值格式不正确。
例如,这里是它在karate.log中打印的内容('payload:',payload)
payload: {
"v": {
"id": "rep_01564526",
"name": "tuttoverde.pgmx",
"type": "PRODUCTION_STARTED",
"ute": "CDL",
"ver": "1.0",
"status": "EXE"
},
"ts": "2021-01-08T08:00:00Z"
}
这里是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?
1条答案
按热度按时间hiz5n14c1#
你在空手道方面做得很好。我强烈建议您开始查看新版本(即将发布),您可以在此处找到详细信息:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
原因是因为异步和java互操作有一些突破性的变化,并且有一些新的api可以在
karate
js中要进行格式转换的对象:以及
karate.log()
应该更好地工作,而不是给你奇怪的格式,你抱怨。使用当前版本,您可以尝试karate.toJson()
如果这能给你带来你所期望的转变。考虑到您的高级用法,我建议您开始使用新版本,并对可能仍然需要的任何内容提供反馈。