如何解决为什么JavaNashnorn库无法正确评估JS代码?
我有一些代码可以在像Webstorm这样的JavaScript IDE中正常工作,但是当我尝试使用Nashorn库(在Java程序中运行JS)将其移植到Java时,我得到了以下错误:“名称:未定义,年龄:未定义” (可能还会有其他人跟踪,具体取决于这里出了什么问题。)
下面是完整代码。下面的这种编码方法似乎总体上可行,但是在某些情况下,我没有得到预期的结果。
非常感谢您的帮助或建议。
谢谢!
public class JavaScriptEvaluationExample
{
public static void main(String[] args) throws ScriptException,NoSuchMethodException
{
// Basic JavaScript evaluation
String json = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30,\n" +
" \"cars\": [\n" +
" {\n" +
" \"name\": \"Ford\",\n" +
" \"models\": [\n" +
" \"Fiesta\",\n" +
" \"Focus\",\n" +
" \"Mustang\"\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"name\": \"BMW\",\n" +
" \"models\": [\n" +
" \"320\",\n" +
" \"X3\",\n" +
" \"X5\"\n" +
" ]\n" +
" },\n" +
" {\n" +
" \"name\": \"Fiat\",\n" +
" \"models\": [\n" +
" \"500\",\n" +
" \"Panda\"\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
String jsScript = "function parseJSONFields(param)\n" +
"{\n" +
" var result = \"\";\n" +
" var carName =\"\" ;\n" +
" var models = \"\";\n" +
" var name = param.name + \",\";\n" +
" var age = param.age;\n" +
" result = \"Name: \" + name + \" Age: \" + age + \"\\n\";\n" +
" for (item in param.cars)\n" +
" {\n" +
" result += \" \"+ \" >> \" + param.cars[item].name +\": \"\n" +
" result+= \" \" + param.cars[item].models\n" +
" result += \"\\n\";\n" +
" }\n" +
" return result;\n" +
"}";
System.out.println(runjs("parseJSONFields",json,jsScript));
}
// ------------------------------------------------------------------------------------------------
private static Object runjs(String functionName,String param,String script) throws ScriptException,NoSuchMethodException
// ------------------------------------------------------------------------------------------------
{
Object resultString = "";
String errorResultString = "";
ScriptEngine js = null;
try
{
if (param.length() > 0)
{
js = new ScriptEngineManager().getEngineByName("javascript");
js.eval(script);
invocable inv = (invocable) js;
}
}
catch (Exception e)
{
errorResultString = e.getMessage() + " ---> " + e.getMessage();
}
return errorResultString.length() > 0 ? errorResultString
: ((invocable) js).invokeFunction(functionName,param);
}
}
解决方法
感谢所有答复。
正如第一人称,问题是我忘记了JSON.parse()语句将字符串转换为JSON对象。
再次非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。