空手道:如何将字符串中的对象/Map从javascript转换为java?

sczxawaw  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(401)

我有一个名为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?

ntjbwcob

ntjbwcob1#

你在空手道方面做得很好。我强烈建议您开始查看新版本(即将发布),您可以在此处找到详细信息:https://github.com/intuit/karate/wiki/1.0-upgrade-guide
原因是因为异步和java互操作有一些突破性的变化,并且有一些新的api可以在 karate js中要进行格式转换的对象:

var temp = karate.fromString(payload);

以及 karate.log() 应该更好地工作,而不是给你奇怪的格式,你抱怨。使用当前版本,您可以尝试 karate.toJson() 如果这能给你带来你所期望的转变。
考虑到您的高级用法,我建议您开始使用新版本,并对可能仍然需要的任何内容提供反馈。

相关问题