I have the string representation of a JSON-serialized object in Java e.g. "{\"name\":\"John\",\"age\":24}"
. How do I parse and return it to the JavaScript context, just the way JSON.parse(str)
would work in JS? Thanks.
The latest version of Rhino has only four args, and the fourth cannot be null. To solve this, you must create a simple class that implements org.mozilla.javascript.Callable:
import org.mozilla.javascript.Callable;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
public class NullCallable implements Callable
{
@Override
public Object call(Context context, Scriptable scope, Scriptable holdable, Object[] objects)
{
return objects[1];
}
}
You can then call NativeJSON.parse like this:
Object result = NativeJSON.parse(context, scope, jsonString, new NullCallable());
Found the answer here: Access Rhino's native JSON.Stringify from Java
import org.mozilla.javascript.NativeJSON;
Object json = NativeJSON.parse(cx, scope, str, null, null);
Another way to do it is by calling org.mozilla.javascript.json.JsonParser.parseValue. That is if you don't need to apply a reviver.
More interestingly, org.mozilla.javascript.NativeJSON
is built around org.mozilla.javascript.json.JsonParser.parseValue
. And you can see that here, https://github.com/mozilla/rhino/blob/master/src/org/mozilla/javascript/NativeJSON.java#L110.
来源:https://stackoverflow.com/questions/10856154/rhino-return-json-from-within-java