javascript Pentaho数据集成:抽取语言分配码

ckx4rj1h  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(139)
    • bounty将在2天后过期**。回答此问题可获得+50的声誉奖励。Cesare正在寻找来自声誉良好来源的答案

我使用PDI API来获取项目中代码的语言分布。
使用如下请求

var url = "http://<my_sonar_instance>/api/measures/component?additionalFields=metrics&component=<sonar_key>&metricKeys=duplicated_lines_density%2Cblocker_violations%2Ccomment_lines_density%2Ccritical_violations%2Cnew_maintainability_rating%2Cnew_duplicated_lines_density%2Cnew_reliability_rating%2Cnew_security_rating%2Cncloc%2Cncloc_language_distribution";

并通过以下方式解析JSON结果

$.component.measures[?(@.metric=="ncloc_language_distribution")].value

在名为的变量中赋值

sonar_ncloc_language_distribution

例如我得到

java=10514;js=237;jsp=3995;web=5;xml=42

现在,我将使用Modified JavaScript值在PDI转换中的某些变量上分配这些值,使用以下JavaScript代码

var map = new Map();
sonar_ncloc_language_distribution.split(";").forEach(x => map[x.split("=")[0]] = x.split("=")[1]);

var sonar_ncloc_java = map.java;
var sonar_ncloc_js = map.js;
var sonar_ncloc_jsp = map.jsp;
var sonar_ncloc_web = map.web;
var sonar_ncloc_xml = map.xml;

但它不起作用错误是

Unable compile javascript: 
syntax error (script#2)

(NOTE:如果我尝试在HTML文件中"单独"执行JavaScript代码,一切正常...)

<!DOCTYPE html>
<html>
<body>

<script>
var sonar_ncloc_language_distribution = "java=10514;js=237;jsp=3995;web=5;xml=42";

var map = new Map();

sonar_ncloc_language_distribution.split(";").forEach(x => map[x.split("=")[0]] = x.split("=")[1]);
console.log(map);

var sonar_ncloc_java = map.java;
var sonar_ncloc_js = map.js;
var sonar_ncloc_jsp = map.jsp;
var sonar_ncloc_web = map.web;
var sonar_ncloc_xml = map.xml;

console.log(map.java);
console.log(map.js);
console.log(map.jsp);
console.log(map.web);
console.log(map.xml);

</script>

</body>
</html>

如有任何建议,我们将不胜感激,并提前感谢您

5vf7fwbs

5vf7fwbs1#

这是因为Rhino引擎不支持ES6。
在浏览器(或节点)中,您使用不同的javascript引擎,这些引擎已实现此处记录的Map对象
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
但是你没有使用Map方法--我是说setget方法,而是使用map,就像Array一样。
因此,要解决您的问题,您只需更换

var map = new Map();

作者

var map = [];

资料来源:
PDI使用来自Mozilla的Rhino引擎,Rhino是核心JavaScript语言的开源实现;它不包含与网页操作相关的对象或方法。
https://intellipaat.com/blog/tutorial/pentaho-tutorial/transforming-your-data-with-javascript-code-and-the-javascript-step/
MapES6Rhino支持
https://mozilla.github.io/rhino/compat/engines.html

相关问题