Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空手道:如何将字符串中的对象/映射从javascript转换为Java?_Javascript_Java_Karate - Fatal编程技术网

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

空手道:如何将字符串中的对象/映射从javascript转换为Java?,javascript,java,karate,Javascript,Java,Karate,我有一个名为production_2.json的json文件 [ { "v":{ "id":"rep_01564526", "name":"tuttoverde.pgmx", "type":"PRODUCTION_STARTED", "ute":"CD

我有一个名为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\u 2.json
  • 并为数组的每个元素发送一个主题
  • 功能

    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);