0

我正在为前端的 javascript 和后端的 java 做一个项目。我正在使用 JSONata 在前端解析传入的 json(这很棒)。它适用于除 Internet Explorer 之外的所有浏览器。

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

$.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:

SCRIPT5009: 'jsonata' is undefined

JSONata 不适合 Internet Explorer 吗?还是有办法绕过这个?

另外,我想如果我不能在客户端运行它,我会在服务器上运行 JSONata,所以我尝试了这段代码:

    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);

我收到以下错误:

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 中)

非常感谢!

4

1 回答 1

0

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

于 2018-02-21T21:43:13.083 回答