将Javascript数组转换为Java数组

将Javascript数组转换为Java数组,java,javascript,javax.script,Java,Javascript,Javax.script,我正在尝试将Java中的Javascript数组转换为Java数组。我正在使用javax.script包。 我在这里测试了这个示例,但是没有识别出“NativeArray”类型: 如何才能识别NativeArray类型?我建议。这允许您将json转换为本机JAVA对象。似乎您最好的选择是编写一个JavaScript转换函数,将本机JavaScript数组转换为本地JAVA对象。请注意,在转换单个元素时,必须注意使用正确的类型 [Edit]下面是一个使用字符串数组的工作示例: ScriptEngi

我正在尝试将Java中的Javascript数组转换为Java数组。我正在使用javax.script包。 我在这里测试了这个示例,但是没有识别出“NativeArray”类型:

如何才能识别NativeArray类型?

我建议。这允许您将json转换为本机JAVA对象。

似乎您最好的选择是编写一个JavaScript转换函数,将本机JavaScript数组转换为本地JAVA对象。请注意,在转换单个元素时,必须注意使用正确的类型

[Edit]下面是一个使用字符串数组的工作示例:

ScriptEngine js=new-ScriptEngineManager().getEngineByName(“JavaScript”);
字符串ss[]=(字符串[])js.eval(
“(函数(){”+
var a=java.lang.reflect.Array.newInstance(java.lang.String,3)+
“a[0]=“foo”;”+
“a[1]=‘bar’;”+
“a[2]=“嘎”;”+
“返回一个”+
"})()");
System.out.println(Arrays.toString(ss));//=>[foo,bar,gah]

我将简单地使用json库并以这种方式解析数组。 例如,请参见Rhino提供的:

此外,脚本接口还提供get()和set(),因此您可以轻松枚举对象的属性并将其添加到数组中:

Scriptable arr = (Scriptable) result;
Object [] array = new Object[arr.getIds().length];
for (Object o : arr.getIds()) {
   int index = (Integer) o;
   array[index] = arr.get(index, null);
}

同样的东西,但不使用NativeArray,因为这似乎是犀牛特有的东西。您可以很容易地删除一个断点,然后查看给定的对象类型,然后向下转换到该类型。这是一种非常接近NativeArray的JS数组实现。

另一个问题中的“NativeArray”类是Rhino的东西,因此如果您使用ScriptEngine机制,我认为它不可用(至少不可用任何“干净”的方式)。。。。错误,可能是
sun.org.mozilla.javascript.internal.NativeArray
访问限制:由于线程“main”中所需的library/usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jarException受到限制,无法访问NativeArray类型javax.script.ScriptException:sun.org.mozilla.javascript.EvaluatorException:找不到方法java.lang.reflect.Array.newInstance(字符串,数字)。(#120)在com.sun.script.javascript.RhinoScriptEngine.invoke(RhinoScriptEngine.java:255)在com.sun.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:213)在JavascriptInJava.main(JavascriptInJava.java:75)在JavascriptInJava.main(JavascriptInJava.java:75)添加这一行时,我得到了上面的错误:var jArr=java.lang.reflect.Array.newInstance(细绳,分类臂.长度);其中sortedParms.length是数组的长度。该方法似乎未定义,尽管它在链接中给出的示例中应该可以工作。有什么解决方法吗?@AndersonGreen:根据我更新的答案,尝试使用参数
java.lang.String
。@AndersonGreen:很高兴听到它!请随意投票给我的ans打开或按“检查”按钮将其视为正确的。