2016-12-15 85 views
1

我使用在Windows Server 2012上运行的Kettle PDI 6.0。我需要使用修改的Java脚本值来处理Json对象。我尝试这样:水壶PDI - 修改的JavaScript - Json函数不可用

var jsondata = JSON.parse(result); 

和获取:

"TypeError: Cannot find function parse in object test value test value test value test value test value test value test value test value test value test value. (script#3)"

我已经尝试寻找对谷歌的解决方案,而不是看起来像这样。我认为这可能是我的安装有问题。

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

import java.util.*; 

但该命令没有被识别(没有标记为粗体)。

我得到:

missing ; before statement (script#2)

也许Java的功能不可用。

+1

在水壶使用旧的mozilla rhino js引擎,写在java上。一些现代浏览器中可用的JS功能不受支持。 – simar

回答

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

是的,JSON功能不可用在JS Rhino引擎构建在水壶的EX4 ECMAScript的,但你可以使用eval釜内处理JSON。

var resultObj = eval('('+result+')'); 

//now you can iterate the foo elements of result original json 
for(i=0;i< resultObj.length;i++){ 
    Alert('foo number ' + i ' value = ' + resultObj[i].foo); 
} 

音符downvote前JS浏览器书呆子这样的回答:所以EVAL是绝对安全的,这是不是为浏览器的JavaScript。