我正在尝试使用 com.schibsted.spt.data 在 Java 中编译 JSLT 表达式。该表达式需要中间变量,但我遇到了编译错误。
这就是我尝试过的:
String jsltExpression = "let parts = split(.id, \"/\") { \"result\": parts[1] + parts[3] }";
Expression jslt = Parser.compileString(jsltExpression);
错误:
com.schibsted.spt.data.jslt.JsltException: Parse error: Encountered " "[" "[ "" at line 1, column 46.
Was expecting:
"(" ...
at <inline>:1:41
at com.schibsted.spt.data.jslt.parser.ParserImpl.compileExpression(ParserImpl.java:62)
at com.schibsted.spt.data.jslt.Parser.compile(Parser.java:226)
at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:86)
at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:74)
还尝试过:
String jsltExpression = "{ \"result\": let(parts = split(.id, \"/\")) parts[1] + parts[3] }";
Expression jslt = Parser.compileString(jsltExpression);
错误:
com.schibsted.spt.data.jslt.JsltException: Parse error: Encountered " "let" "let "" at line 1, column 13.
Was expecting one of:
<INTEGER> ...
<DECIMAL> ...
<STRING> ...
"[" ...
"{" ...
"true" ...
"false" ...
"." ...
"if" ...
"(" ...
<IDENT> ...
<PIDENT> ...
<VARIABLE> ...
at <inline>:1:11
at com.schibsted.spt.data.jslt.parser.ParserImpl.compileExpression(ParserImpl.java:62)
at com.schibsted.spt.data.jslt.Parser.compile(Parser.java:226)
at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:86)
at com.schibsted.spt.data.jslt.Parser.compileString(Parser.java:74)
是否可以使用 com.schibsted.spt.data 编译类似的 Expressien?或者有什么限制吗?
您必须使用
$
来访问 parts
值,如下所示:
String jsltExpression = "let parts = split(.id, \"/\") { \"result\": $parts[1] + $parts[3] }";
您可以在 Playground 中尝试 jslt 表达式(https://www.garshol.priv.no/jslt-demo),它可以为您提供更多错误反馈。