我正在为前端的 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 中)
非常感谢!