Преобразование массива Javascript в массив Java
Я пытаюсь преобразовать массив Javascript в Java в массив Java. Я использую пакет javax.script. Я протестировал этот пример здесь, но тип "NativeArray" не был распознан: /questions/47216423/kak-preobrazovat-massivyi-rhino-javascript-v-java-massivyi/47216443#47216443
Как я могу получить тип NativeArray для распознавания?
4 ответа
В соответствии с этим ответом, похоже, вам лучше всего написать функцию конвертера 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]
Носорог предлагает это:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Embedding_tutorial
Также интерфейс 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.
Я бы просто использовал json-lib и таким образом анализировал массив. например, см. Как проанализировать JSON и превратить его значения в массив?
Я бы порекомендовал JSON-java библиотеку Дуга Крокфорда. Это позволяет вам конвертировать JSON в нативные объекты JAVA.