如何将JavaPOJO转换为Nashorn Json?
我有一个Java对象,我想将其转换为json对象并传递给Nashorn javascript引擎。用谷歌搜索这个问题的答案是非常困难的!有人能告诉我怎么做吗 我试过这个:如何将JavaPOJO转换为Nashorn Json?,java,json,java-8,pojo,nashorn,Java,Json,Java 8,Pojo,Nashorn,我有一个Java对象,我想将其转换为json对象并传递给Nashorn javascript引擎。用谷歌搜索这个问题的答案是非常困难的!有人能告诉我怎么做吗 我试过这个: ObjectMapper mapper = new ObjectMapper(); String inputModelAsString = mapper.writeValueAsString(inputModel); 然后将字符串json传递给函数: result = invocable.invokeFunction(PRO
ObjectMapper mapper = new ObjectMapper();
String inputModelAsString = mapper.writeValueAsString(inputModel);
然后将字符串json传递给函数:
result = invocable.invokeFunction(PROGRAM_FUNCTION, moduleName, inputModelAsString);
但它是作为字符串传递的,而不是作为json传递的。您可以在Nashorn中使用内置json功能,如中所述
您可以通过
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
ScriptObjectMirror json = (ScriptObjectMirror) engine.eval("("+inputModelAsString+")");
然后可以在代码中传递json对象
result = invocable.invokeFunction(PROGRAM_FUNCTION, moduleName, json);
我面临着一个类似的问题,并以稍微不同的方式处理它 我不会直接访问ScriptObjectMirror类,因为它是内部Nashorn API的一部分,因此易于更改 您可以尝试以下方法:
engine.eval("var inputModel = " + inputModel + ";");
Object json = engine.get("inputModel");
您可以使用JSON解析javascript代码中的字符串。parse尝试过它,但ScriptObjectMirror jsonInputModel=(ScriptObjectMirror)engine.eval(“{\'测试\':1}”);导致脚本异常。它期待一个“;”“:”在哪里。好主意,但是,我如何让它工作呢?出于某种原因,您需要在表达式周围放上括号,如:engine.eval(“(“+inputModelAsString+”),然后它就工作了。