Nashorn: Javascript to Java call question
Jim Laskey (Oracle)
james.laskey at oracle.com
Wed Jun 5 12:51:19 PDT 2013
The repo you provided has empty JSON-java and JSON-js directories, so I'll give you an alternative example. The main thing to note is that, because of a JS object's dynamic nature, it can not mirror a Java object. A better analogy would be to think of a JS object as a Map object, where properties are keys and you access values with keys.
Run the enclosed example as follows;
javac Example.java
java Example
The class of myObject is a JSObject. You can access properties of a JSObject with getMember/setMember (or getSlot/setSlot for integer keys.)
=== Example.java ===
import javax.script.*;
import jdk.nashorn.api.scripting.JSObject;
public class Example {
public static void main(String[] args) throws Exception {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("nashorn");
engine.eval(new java.io.FileReader("Example1.js"));
JSObject myObject = (JSObject)engine.get("myObject");
System.out.println(myObject.getMember("a"));
System.out.println(myObject.getMember("b"));
System.out.println(myObject.getMember("c"));
myObject.setMember("d", "A new string");
engine.eval(new java.io.FileReader("Example2.js"));
}
}
=== Example1.js ===
var myObject = {
a: "A string",
b: 100,
c: true
}
=== Example2.js ===
print(myObject.d);
==== Output ===
A string
100
true
A new string
Cheers,
-- Jim
On 2013-06-05, at 3:50 PM, Mani Sarkar <sadhak001 at gmail.com> wrote:
> Hi,
>
> I have another query regarding the example (see
> https://github.com/neomatrix369/NashornHackDay/blob/master/examples/JSON_in_JS_and_Java/JSJSONInJava.java)
> created sometime back during the Nashorn hackday. When I bring a JS object
> created in Nashorn into Java I'm not able to access the object directly,
> how do I access it like a normal java object.
>
> If its a raw / primitive type then the contents are accessible (you can see
> the value) while for JS object, when I say
>
> *System.out.println(JSObjectFromNashorn);*
>
> I get the below output
>
> *[object object]*
>
> The full implementation of what I'm talking about can be found at the above
> link.
>
> Regards,
> mani
>
> --
> *Twitter:* @theNeomatrix369 *Blog:*
> http://neomatrix369.wordpress.com
> *JUG activity:* LJC Advocate (@adoptopenjdk & @adoptajsr programs)
> *Meet-a-Project:* https://github.com/MutabilityDetector
> *Bitbucket:* https://bitbucket.org/neomatrix369 * **Github:* https://github
> .com/neomatrix369
> *LinkedIn:* http://uk.linkedin.com/pub/mani-sarkar/71/a77/39b
> *Devoxx UK 2013* was a grand success:
> http://www.devoxx.com/display/UK13/Home
>
> *Don't chase success, rather aim for "Excellence", and success will come
> chasing after you!*
More information about the nashorn-dev
mailing list