2016-12-15 7 views
1

Я использую Kettle PDI 6.0, работающий на Windows Server 2012. Мне нужно использовать модифицированное значение Java Script для обработки объекта Json. Я пытаюсь что-то вроде этого:Kettle 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)"

Я уже стараюсь в поисках решения на Google, но не похоже, что. Я думаю, что это может быть что-то не так с моей установкой.

Примечание: Я уже пытаюсь использовать команду:

import java.util.*; 

Но что команда не распознана (Не выделены жирным шрифтом).

я получаю:

missing ; before statement (script#2)

Может функции Java не доступны.

+1

В чайнике используется старый двигатель мозаики rhino js, ​​написанный на java. Некоторые современные функции JS, доступные в современных браузерах, не поддерживаются. – simar

ответ

1

Я сделал свою собственную функцию для решения проблемы. Я отправлю здесь, чтобы помочь тем, у кого есть такая же проблема. Если кто-то хочет помочь решить начальную проблему, меня все равно интересует.

Вы можете вставить код ниже на свой шаг «Измененный Java Script Value» после получения ответа Json от службы или получить его в файле. Обратите внимание, что вам нужно изменить имя переменных, которые вы хотите найти в 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 не доступна на ех4 ECMAScript Дж.С. сборки носорог двигателя в чайнике, но вы можете обращаться в чайнике JSON с помощью Eval.

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

примечание Js ботаников браузера до downvote этот ответ: это не Javascript для браузера так Eval совершенно безопасно.