首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Internet Explorer中运行JSONata

在Internet Explorer中运行JSONata
EN

Stack Overflow用户
提问于 2018-02-21 00:51:49
回答 1查看 334关注 0票数 0

我正在用javascript做一个项目,前端用java,后端用java。我在前端使用JSONata来解析传入的json (它很棒)。它在除Internet Explorer之外的所有浏览器上都工作得很好。

代码基本上是(我使用JSONata的地方):

代码语言:javascript
复制
$.ajax({ 

            dataType: 'json',
            cache : false,
            type: "POST",
            url: "consult", 
            data: {"id": id},
            success: function(data) {   
                console.log("data", data);
                var claim = jsonata('$[0].data.claim').evaluate(data);
}

这在除Internet Explorer之外的所有浏览器中都没有问题,在Internet Explorer中我得到了以下错误:

代码语言:javascript
复制
SCRIPT5009: 'jsonata' is undefined

JSONata不适合internet explorer吗?或者有没有办法绕过这件事?

此外,我认为如果我不能在客户端运行它,那么我可以在服务器端运行JSONata,所以我尝试了以下代码:

代码语言:javascript
复制
    ScriptEngineManager factory = new ScriptEngineManager();
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    Invocable inv = (Invocable) engine;
    FileReader jsonata = new FileReader("jsonata.js");

    engine.eval(jsonata);

    // read and JSON.parse the input data
    byte[] sample = Files.readAllBytes(Paths.get("sample.json"));
    engine.put("input", new String(sample));
    Object inputjson = engine.eval("JSON.parse(input);");

    // query the data
    String expression = "$sum(Account.Order.Product.(Price * Quantity))";  // JSONata expression
    Object expr = inv.invokeFunction("jsonata", expression);
    Object resultjson = inv.invokeMethod(expr, "evaluate", inputjson);

    // JSON.stringify the result
    engine.put("resultjson", resultjson);
    Object result = engine.eval("JSON.stringify(resultjson);");
    System.out.println(result);

我得到了以下错误:

代码语言:javascript
复制
Exception in thread "main" javax.script.ScriptException: <eval>:1448:25 Expected an operand but found yield
            result = yield evaluatePath(expr.steps, input, environment);
                     ^ in <eval> at line number 1448 at column number 25
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470)
at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:537)
at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:524)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402)
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:150)
at javax.script.AbstractScriptEngine.eval(Unknown Source)
at com.test.main.Main.main(Main.java:67)
Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1448:25 Expected an operand but found yield
            result = yield evaluatePath(expr.steps, input, environment);
                     ^
at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:294)
at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:279)
at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3182)
at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3325)
at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282)
at jdk.nashorn.internal.parser.Parser.expressionStatement(Parser.java:1150)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:967)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:863)
at jdk.nashorn.internal.parser.Parser.statementList(Parser.java:1013)
at jdk.nashorn.internal.parser.Parser.getBlock(Parser.java:531)
at jdk.nashorn.internal.parser.Parser.switchStatement(Parser.java:1717)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:917)
at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)
at jdk.nashorn.internal.parser.Parser.functionBody(Parser.java:2901)
at jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2663)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:875)
at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)
at jdk.nashorn.internal.parser.Parser.functionBody(Parser.java:2901)
at jdk.nashorn.internal.parser.Parser.functionExpression(Parser.java:2663)
at jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2506)
at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)
at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)
at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282)
at jdk.nashorn.internal.parser.Parser.primaryExpression(Parser.java:1992)
at jdk.nashorn.internal.parser.Parser.memberExpression(Parser.java:2511)
at jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:2372)
at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3147)
at jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:3353)
at jdk.nashorn.internal.parser.Parser.variableStatement(Parser.java:1088)
at jdk.nashorn.internal.parser.Parser.statement(Parser.java:884)
at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)
at jdk.nashorn.internal.parser.Parser.program(Parser.java:709)
at jdk.nashorn.internal.parser.Parser.parse(Parser.java:283)
at jdk.nashorn.internal.parser.Parser.parse(Parser.java:249)
at jdk.nashorn.internal.runtime.Context.compile(Context.java:1284)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1251)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:627)
at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:535)
... 5 more

PD:我正在使用jsonata.js (来自他们的网站:https://github.com/jsonata-js/jsonata/blob/master/jsonata.js

如何运行JSONata以使其兼容所有浏览器(特别是在Internet Explorer中)

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-02-22 05:43:13

这可能是ES6依赖项的问题。尝试使用jsonata-es5.js。您可以使用npm t或直接从here获取它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48890311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档