空手道:如何将字符串中的 object/map 从 javascript 转换为 Java?
Karate: how to convert object/map in string from javascript to Java?
我有一个名为 production_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_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;
}
问题是java脚本函数中“payload”的值是正确的,并且正确打印,而在“sendMessage”函数内部,有效载荷的值格式不正确。
例如,这是它在 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 class
的函数“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);
}
"""
如何将 java 脚本中的对象转换为字符串以便我可以将其传递给 java?
你在空手道上做了一些非常高级的事情。我强烈建议您开始查看新版本(即将发布),您可以在此处找到详细信息:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
原因是因为异步和 Java 互操作有一些重大变化 - 还有一些新的 API-s 你可以调用 JS 中的 karate
对象来做格式转换:
var temp = karate.fromString(payload);
并且 karate.log()
应该可以更好地工作,并且不会给您带来您抱怨的奇怪格式。使用当前版本,您可以尝试 karate.toJson()
如果它能为您提供您期望的转换。
鉴于您的高级用法,我建议您开始使用新版本,并就可能仍需要的任何内容提供反馈。
我有一个名为 production_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_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;
}
问题是java脚本函数中“payload”的值是正确的,并且正确打印,而在“sendMessage”函数内部,有效载荷的值格式不正确。
例如,这是它在 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 class
的函数“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);
}
"""
如何将 java 脚本中的对象转换为字符串以便我可以将其传递给 java?
你在空手道上做了一些非常高级的事情。我强烈建议您开始查看新版本(即将发布),您可以在此处找到详细信息:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
原因是因为异步和 Java 互操作有一些重大变化 - 还有一些新的 API-s 你可以调用 JS 中的 karate
对象来做格式转换:
var temp = karate.fromString(payload);
并且 karate.log()
应该可以更好地工作,并且不会给您带来您抱怨的奇怪格式。使用当前版本,您可以尝试 karate.toJson()
如果它能为您提供您期望的转换。
鉴于您的高级用法,我建议您开始使用新版本,并就可能仍需要的任何内容提供反馈。