2016-12-22 11 views
2

jsonオブジェクトに変換してNashorn javascriptエンジンに渡したいJavaオブジェクトがあります。これはGoogleにとっては驚くほど難しいことです。誰かが私にそれをする方法を教えてもいいですか?Java PojoをNashorn Jsonに変換する方法ですか?

私はこの試みた:

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

そして、関数に文字列をJSONを渡す:

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

をしかし、それは文字列としてではなく、JSONとして渡されました。

+0

を –

答えて

4

に述べたように、あなたは、あなたはあなたのコード

でJSONオブジェクトを渡すことができ

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

によりエンジンからJSONに変換することができますNashornにinbuild JSONの機能を使用することができます

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

は、{ "(それを試してみましたが、ScriptObjectMirror jsonInputModel =(ScriptObjectMirror)engine.eval \ "test \":1} "); ScriptExceptionになります。その期待している ';' ':'はどこにありますか?良いアイデアだけど、どうやって動かせるの? – user2800708

+0

なんらかの理由で、次のように式のまわりに角括弧を入れる必要があります。engine.eval( "(" + "inputModelAsString +") ")次に動作します。 – user2800708

0

私は同様の問題に直面し、わずかに異なる方法。

内部NashornのAPIの一部であるため、ScriptObjectMirrorクラスに直接アクセスすることはないため、変更する傾向があります。

あなたはこのような何か試してください:あなたはJSON.parse(複数可)を使用してJavaScriptコード内の文字列を解析することができます

engine.eval("var inputModel = " + inputModel + ";");  
Object json = engine.get("inputModel"); 
関連する問題