javascript - WSO2 内带有 Js 的 For 循环 - id 未定义

标签 javascript arrays for-loop wso2 wso2-esb

我也有这样的情况。 给定一个数组,我只需要迭代并在最后提取一个新的 json ,称为 Couple 和 id 和 type,但我总是有 id undefined -> 我真的无法理解原因,因为如果我在在线 js 运行器上尝试这个脚本,它就可以工作(使用 console.log 而不是打印)

请注意 elementsToUpdate 是这样的:

[{
    "id": 10,
    "name": "Andrea",
    "type": "Human",
    "age": 22
 }, {
    "id": 15,
    "name": "Marco",
    "type": "Alien",
    "age": 19,
    "others": {
        "type": "ndf"
    }
 }]

我在 wso2 中的脚本是:

<script language="js"><![CDATA[var elements = mc.getProperty('elementsToUpdate');
         var payload = [];
         print('elements dentro js prima del for: ' +  elements);          
         for (var i in elements) { 
         print('dentro il for di js');      
         var id= elements[i].id;
         print('dentro il for di js l id  '+ id );
         var type=elements[i].type; 
         var couple= {"id" : id ,"type" : type};
         payload.push(couple);   }
         print('result in JSON: ' , payload );
        var result= mc.setPayloadJSON(payload);]]></script>

Pics of the error

一如既往地感谢您抽出时间, 我真的非常感激。

最佳答案

您的脚本存在多个问题。让我尝试解释一些。

var elements = mc.getProperty('elementsToUpdate');

上面的行可以从属性中检索内容,但不能保证它始终是 JSON 对象。因此,为了确保您以 JSON 形式读取有效负载,我使用丰富中介器将数组保留为正文,并使用 mc.getPayloadJSON() 以 JSON 对象形式读取。

for (var i in elements)

上面是一个 for-each 类型循环,因此您将迭代元素。所以 i 将是数组的一个元素,而不是递增的索引,因此这个语法是错误的 elements[i].type

我对你的脚本做了一些轻微的修改。检查以下内容。

<enrich>
  <source clone="false" type="property" property="elementsToUpdate"/>
  <target action="replace" type="body"/>
</enrich>
<script language="js"><![CDATA[
      var elements = mc.getPayloadJSON();
      var payload = [];
      print('elements dentro js prima del for: ' +  elements);          
      for (var i = 0; i < elements.length; i++) { 
        print('dentro il for di js == ' +elements[i]);      
        var id = elements[i].id;
        print('dentro il for di js l id  '+ id );
        var type= elements[i].type; 
        var couple= {"id" : id ,"type" : type};
      payload.push(couple);   }
      print('result in JSON: ' , payload );
      var result= mc.setPayloadJSON(payload);]]>
</script>

关于javascript - WSO2 内带有 Js 的 For 循环 - id 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74179956/

相关文章:

javascript - getElementsByTagName() 是否仅返回完全匹配?

c - 为什么在 C 中使用指针时不需要指定数组大小?

c++ - 将随机数插入数组,其中每个值都通过 for 循环输入

ios - Swift for 循环不起作用

C "for"循环问题

javascript - IE 无法使用 getBoundingClientRect() 正确计算

javascript - ree + cucumber 中的 headless JavaScript 测试

javascript - 如何让javascript中的错误信息在更正后消失?

arrays - 带查找的动态数组的行式文本连接

c++ - 为什么必须将函数必须返回的数组声明为静态数组?