获取ScriptEngine.eval()的结果数组

时间:2016-03-24 03:42:53

标签: javascript java arrays

我正在尝试将javax.script.ScriptEngine用于eval()一些JS脚本。 如何知道类型为eval()的{​​{1}}之后的结果是否为数组?如果是这样,我该如何施展呢?

现在,要知道对象是Number类型还是String类型,我使用Object。当脚本的结果是数组时,如果我使用instanceof打印返回的对象,则只打印System.out.println()

3 个答案:

答案 0 :(得分:2)

正如您所注意到的,它不是java数组而是javascript数组,如果您打印返回对象的类,您可能会发现它" ScriptObjectMirror"。我有一个解决方法,即在另一个脚本变量中调用数组,然后获取它的值(参见下面的例子)。我相信有更好的方法来解决这个阵列问题,等待好的答案。

engine.eval("var fruits = [\"Banana\", \"Orange\", \"Apple\", \"Mango\"]; var d = fruits.toString();");
System.out.println(engine.get("fruits").getClass());
System.out.println(engine.get("d").getClass());
System.out.println(engine.get("d"));

答案 1 :(得分:1)

  

如何知道在Object类型的eval()之后的结果是否为数组?

使用instanceof

if(result instanceof Object[]){
    //your code
}
  

如果是的话,我该如何施展呢?

if(result instanceof Object[]){
    Object[] array = (Object[])result;
    for(Object o : array) {
    //your code
    }
}    

答案 2 :(得分:1)

在我的情况下,修改脚本使其返回列表可以解决问题:

private String arrayToList() {
    if (javascript.startsWith("[") && javascript.endsWith("]"))
        javascript = "java.util.Arrays.asList(" + javascript + ")";
    return javascript;
}

但当然它只处理使用括号产生数组的情况,例如:

["entry1", "entry2", settings.getMainUserEmail(), loginEmail]

无论如何,底线是您需要返回List而不是数组。然后您还可以使用instanceof