2016-12-15 3 views
1

Windows Server 2012에서 실행중인 주전자 PDI 6.0을 사용하고 있습니다. Json 개체에서 처리하기 위해 수정 된 Java 스크립트 값을 사용해야합니다. 나는이 같은 시도 :주전자 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)

아마 자바 기능이 없습니다.

+1

주전자에 자바로 작성된 오래된 mozilla rhino js 엔진이 사용되었습니다. 최신 브라우저에서 사용할 수있는 일부 최신 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 코뿔소 엔진 빌드의하여 eX4 ECMAScript를 사용할 수 없습니다,하지만 당신은 평가를 사용하여 주전자에 JSON을 처리 할 수 ​​있습니다. downvote 전에 JS 브라우저 바보이 답변에

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); 
} 

참고 : 평가가 완벽하게 안전 그래서이 브라우저의 자바 스크립트 없습니다.

관련 문제