Kettle PDI — модифицированный JavaScript — функция Json недоступна

Я использую Kettle PDI 6.0, работающий на Windows Server 2012. Мне нужно использовать измененное значение сценария Java для обработки объекта Json. Я пытаюсь что-то вроде этого:

var jsondata = JSON.parse(result);

И получите это:

«Ошибка типа: не удается найти анализ функции в объекте. Тестовое значение Тестовое значение Тестовое значение Тестовое значение Тестовое значение Тестовое значение Тестовое значение Тестовое значение Тестовое значение. (сценарий № 3)»

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

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

import java.util.*;

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

Я получил:

отсутствует ; перед оператором (сценарий № 2)

Возможно, функции Java недоступны.


person Mauro Ferraz    schedule 15.12.2016    source источник
comment
В чайнике использован старый js движок mozilla rhino, написанный на java. Некоторые современные функции JS, доступные в современных браузерах, не поддерживаются.   -  person simar    schedule 20.12.2016


Ответы (2)


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

Вы можете вставить приведенный ниже код на шаг «Измененное значение сценария Java» после получения ответа 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 = "";
    }
person Mauro Ferraz    schedule 15.12.2016

да, функция parse json недоступна в ex4 ecmascript js rhino engine, встроенного в чайник, но вы можете обрабатывать 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);
}

Это не javascript для браузера, поэтому eval совершенно безопасен.

person jacktrade    schedule 12.01.2017