Преобразование массива Javascript в массив Java - PullRequest
3 голосов
/ 13 января 2012

Я пытаюсь преобразовать массив Javascript в Java в массив Java. Я использую пакет javax.script. Я протестировал этот пример здесь, но тип "NativeArray" не был распознан: https://stackoverflow.com/a/1433489/975097

Как я могу получить распознаваемый тип NativeArray?

Ответы [ 4 ]

3 голосов
/ 13 января 2012

Rhino предлагает это:

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.Вы можете легко отбросить точку останова и посмотреть, какой тип объекта вам дали, затем понизить до этого.Это своего рода реализация JS Array, довольно близкая к NativeArray.

2 голосов
/ 13 января 2012

За этот ответ похоже, что вам лучше всего написать функцию конвертера JavaScript, которая преобразует собственный массив JavaScript в массив Java с помощью функции привязки Java Rhino .Обратите внимание, что вам нужно позаботиться о том, чтобы использовать правильный тип при преобразовании отдельных элементов.

[Edit] Вот рабочий пример использования массива строк:

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]
0 голосов
/ 13 января 2012

Я бы просто использовал json-lib и анализировал массив таким образом. например, см. Как проанализировать JSON и превратить его значения в массив?

0 голосов
/ 13 января 2012

Я бы порекомендовал JSON-java библиотека Дуга Крокфордса . Это позволяет вам конвертировать json в собственные объекты JAVA.

...