Forma efectiva de pasar JSON entre java y javascript

Soy bastante nuevo en Nashorn y tengo scripts en la parte superior de la JVM y quería saber si puedo obtener mi código java y javascripts para comunicarme de manera más efectiva.

Estoy usando una biblioteca JS de terceros que funciona con objetos JS, y en mi código Java tengo los datos que quiero pasar comoMap<String, Object> data.

Debido a que JS de terceros espera trabajar con objetos JS simples, no puedo pasar midata tal como está, aunque el motor de secuencias de comandos le permite acceder a un Mapa como si fuera un objeto JS simple.

El script que estoy usando usa 'hasOwnProperty' en el argumento de datos y falla cuando se invoca en un objeto Java.

Cuando intenté usar Object.prototype.hasOwnProperty.call (data, 'myProp') tampoco funcionó y siempre devolvió 'false'. El problema básico es que un objeto Java no es un prototipo de objeto javascript.

lo que terminé haciendo algo como esto:

Map<String, Object> data;

ObjectMapper mapper = new ObjectMapper();   
String rawJSON = mapper.writeValueAsString(data);

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

engine.eval('third_party_lib.js');
engine.eval('function doSomething(jsonStr) { var jsObj = JSON.parse(jsonStr); return doSomethingElse(jsObj); }');
Object value = ((Invocable) engine).invokeFunction("doSomething", rawJSON);

Esto funciona como se esperaba, pero todo este análisis JSON de ida y vuelta es pesado y parece que podría haber una forma más simple, rápida y directa de hacerlo.

Entonces, ¿hay una mejor manera de pasar JSON entre Java y Javascript o una forma de crear un objeto JS compatible en mi código Java?

He vistoesta guía para la representación de plantillas con mustache.js pero está haciendo más o menos lo mismo.

Gracias !

Respuestas a la pregunta(1)

Su respuesta a la pregunta