3

我正在尝试将 Java 中的 Javascript 数组转换为 Java 数组。我正在使用 javax.script 包。我在这里测试了这个例子,但是“NativeArray”类型没有被识别:https ://stackoverflow.com/a/1433489/975097

如何让 NativeArray 类型被识别?

4

4 回答 4

3

犀牛提供这个:

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Embedding_tutorial#usingJSObjs

Scriptable 接口还提供 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,因为这似乎是 Rhino 特有的事情。您可以轻松地删除断点并查看给定的对象类型,然后向下转换。这是一种非常接近 NativeArray 的 JS Array 实现。

于 2012-01-13T16:55:22.820 回答
2

根据这个答案,您最好的选择是编写一个 JavaScript 转换器函数,该函数使用 Rhino 的 Java 绑定功能将原生 JavaScript 数组转换为 Java 数组。请注意,在转换单个元素时,您必须小心使用正确的类型。

[编辑]这是一个使用字符串数组的工作示例:

ScriptEngine js = new ScriptEngineManager().getEngineByName("JavaScript");
String ss[] = (String[]) js.eval(
    "(function() {" +
    "  var a = java.lang.reflect.Array.newInstance(java.lang.String, 3);" +
    "  a[0] = 'foo';" +
    "  a[1] = 'bar';" +
    "  a[2] = 'gah';" +
    "  return a;" +
    "})()");
System.out.println(Arrays.toString(ss)); // => [foo, bar, gah]
于 2012-01-13T16:52:09.953 回答
0

我会推荐Doug Crockfords JSON-java library。这允许您将 json 转换为本地 JAVA 对象。

于 2012-01-13T16:47:48.353 回答
0

我会简单地使用 json-lib 并以这种方式解析数组。例如,请参阅如何解析 JSON 并将其值转换为数组?

于 2012-01-13T16:54:48.543 回答