2016-12-15 84 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。