繁体   English   中英

如何使用Rhino从Javascript中的Java HashMap获取值

[英]How to get values from a Java HashMap in javascript function using Rhino

我正在使用Rhino库在android中执行JavaScript函数。 我有一个JavaScript函数,

var exucuteJS = function(controlValues) {
var valueSelected = controlValues['country'];
valueSelected = valueSelected.toUpperCase();
 switch (valueSelected) {
    case "INDIA":
        return "IND_HOME";
    case "NEPAL":
        return "NEP_HOME";
    default:
        return "DEF_HOME"
 }
}

我正在将Java HashMap对象作为参数传递,例如对函数executeJS调用controlValues。 问题是Rhino无法使用javascript代码从键中获取值。

var valueSelected = controlValues['country'];

返回值是不确定的。

这条线很好用,

var valueSelected = controlValues.get('country');

但无效的javascript代码。

相同的javascript将在android和iOS中执行。 上述行在iOS中不受支持。 请提出建议。 我正在使用最新版本的Rhino。

最终,我自己找到了答案。

而不是将HashMap发送到javascript函数,需要将其作为JSONObject发送。 与普通JSONObject的对象不同,它不是NativeJSON对象形式的对象。

Object nativeJsonObject= NativeJSON.parse(rhino,scope,controlValueJsonString,new NullCallable());

犀牛-犀牛的Context对象。 scope-脚本对象的object controlValueJsonString-等效于HashMap的JSON字符串。 (controlValueJsonString = new Gson()。toJson(hashMap);)

NullCallable是从Callable实现的类(来自Rhino的org.mozilla.javascript.Callable的程序包)

此“ nativeJsonObject”应传递给javascript函数。

Object[] params = new Object[] { controlValues };

从JSON对象中,javascript可以将值获取为

var valueSelected = controlValues['country'];

这为我工作。 真的,我不知道为什么唐纳德对这个问题投了反对票。 管理员,请注意此问题。

访问复杂对象的数据的唯一方法是使用其接口。 您需要为Android和ios创建单独的解决方案。

typeof运算符应帮助您在这些情况之间切换。

无需实现NullCallable类的简单解决方案是

new JsonParser(context, scope).parseValue("{\"this is\":\"JSON\"}");

我在Rhino上找到的:从Java内部返回JSON

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM