我也有这样的情况。 给定一个数组,我只需要迭代并在最后提取一个新的 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>
一如既往地感谢您抽出时间, 我真的非常感激。
最佳答案
您的脚本存在多个问题。让我尝试解释一些。
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/