Kettle PDI - 修改后的JavaScript - Json功能不可用

时间:2016-12-15 13:09:24

标签: json pentaho kettle e4x

我正在使用在Windows Server 2012上运行的Kettle PDI 6.0。我需要使用Modified Java Script Value来处理Json对象。我尝试这样的事情:

var jsondata = JSON.parse(result);

得到那个:

  

" TypeError:找不到对象测试值中的函数解析测试值测试值测试值测试值测试值测试值测试值测试值测试值。 (脚本#3)"

我已经尝试在谷歌上寻找解决方案,但看起来并非如此。我认为我的安装可能有问题。

注意:我已经尝试使用命令:

import java.util.*;

但是该命令无法识别(未标记为粗体)。

我明白了:

  

失踪;在陈述之前(脚本#2)

可能Java功能不可用。

2 个答案:

答案 0 :(得分:1)

我自己创建了解决问题的功能。我会在这里发帖,以帮助谁有同样的问题。如果有人想帮助解决最初的问题,我仍然感兴趣。

您可以在从服务接收Json响应后将代码粘贴到“修改的Java脚本值”步骤下面,或者将其存档。请注意,您需要更改要在Json上找到的变量的名称。

结果字段是Json值。

    //Script here

    function findInArray(myValue, myArray){
        var myResult='';
        if(myArray.indexOf(myValue) > -1){
            myResult = true;
        } else {
            myResult = false;
        }
        return myResult;
    }


    function getAttributeValue(Atribute, Object)
    {

       start = indexOf(Object,Atribute);

       for (i= start; i < Object.length; i++)
       {
          if (substr(Object,i,1) == ":")
          {
             start_value = i+1;
             break;
          }
       }

       for (i= start_value; i < Object.length; i++)
       {

          end_value = i;

          if (substr(Object,i,1) == ",")
          {         
             break;
          }
       }


       AttributeValue = replace(substr(Object, start_value, end_value-start_value),'"','');   


       if (indexOf(AttributeValue, "null") >= 0)
       {
          AttributeValue = null;      
       } 

       return AttributeValue ;  

    }

    // Recupera Status
    if (findInArray("status",result))
    {

       var status = getAttributeValue("status", result);  

    }
    else
    {
       var status = "";
    }

    // Recupera _ID
    if (findInArray("_id",result))
    {

       var mandrill_id = getAttributeValue("_id", result);  

    }
    else
    {
       var mandrill_id = "";
    }


    // Recupera reject_reason
    if (findInArray("reject_reason",result))
    {

       var reject_reason = replace(getAttributeValue("reject_reason", result),"}","");  

    }
    else
    {
       var reject_reason = "";
    }

答案 1 :(得分:0)

是的,解析 json函数在水壶中的js rhino引擎构建的ex4 ecmascript上不可用,但你可以使用eval处理水壶中的json。

gem list

这不是浏览器的javascript,所以eval非常安全。