2016-12-22 6 views
2

У меня есть объект Java, который я хочу превратить в объект json и перейти к движку JavaScript Nashorn. На удивление сложно ответить Google на это! Может ли кто-нибудь сказать мне, как это сделать?Как конвертировать Java Pojo в Nashorn Json?

Я попытался это:

ObjectMapper mapper = new ObjectMapper(); 
String inputModelAsString = mapper.writeValueAsString(inputModel); 

И затем передавая строку JSON к функции:

result = invocable.invokeFunction(PROGRAM_FUNCTION, moduleName, inputModelAsString); 

Но он был принят в виде строки, а не как JSON.

+0

Вы можете разобрать строку в вашем яваскрипте кода с JSON.parse (ы) –

ответ

4

Вы можете преобразовать JSON от двигателя на

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 
ScriptObjectMirror json = (ScriptObjectMirror) engine.eval("("+inputModelAsString+")"); 

Затем вы можете передать объект JSON в вас код

result = invocable.invokeFunction(PROGRAM_FUNCTION, moduleName, json); 
+0

пробовал, но ScriptObjectMirror jsonInputModel = (ScriptObjectMirror) engine.eval ("{ \ "тест \": 1} "); приводит к исключению ScriptException. Ожидание «;» где находится «:». Хорошая идея, как мне заставить ее работать? – user2800708

+0

По какой-то причине вам нужно поместить скобки вокруг выражения следующим образом: engine.eval ("(+ inputModelAsString +") ") Затем он работает. – user2800708

0

Я столкнулся с аналогичной проблемой и обработал ее в немного по-другому.

Я бы не получил доступ к классу ScriptObjectMirror напрямую, поскольку он является частью внутреннего API Nashorn и поэтому подвержен изменениям.

Вы можете попробовать что-то вроде этого:

engine.eval("var inputModel = " + inputModel + ";");  
Object json = engine.get("inputModel"); 
Смежные вопросы