我试图通过$ match运算符和谓词中的正则表达式使用jsonata4java。
jsonata代码已在JSonata Exerciser应用程序上成功测试,但是在我的Java测试中失败,并出现了错误消息,该消息似乎来自antlr(词法分析器/解析器)。锻炼者用于相同的输入。
尝试过的事情: 1)升级到最新版本的jsonata4java(1.0.5)。 2)逃脱某些角色的各种方法(在黑暗中拍摄) 3)简化表达 4)在谓词(tin〜> / regex /)中使用lambda样式而不是match 5)逐步完成一些生成的解析代码
public void test() {
try {
Expressions expr = null;
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonObj = null;
String json = "{\"id\":\"1234\"}";
String expression = "$$[$match(id, /1234/)].id";
// String expression = "$$.id";
System.out.println("Expression: " + expression);
jsonObj = mapper.readTree(json);
expr = Expressions.parse(expression);
JsonNode jsonResult = expr.evaluate(jsonObj);
System.out.println("" + mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonResult));
}
catch(Throwable th) {
System.out.println(th.getMessage());
}
}
我希望这段代码仅显示“ id”属性“ 1234”。而是在执行Expressions.parse(expression)时引发异常。错误消息的文本是:
Expression: $$[$match(id, /1234/)].id
line 1:2 at [@1,2:2='[',<16>,1:2]: missing '.' at '[',
line 1:14 at [@6,14:14='/',<29>,1:14]: no viable alternative at input '$match(id,/',
line 1:14 at [@6,14:14='/',<29>,1:14]: extraneous input '/' expecting {'(',
'true', 'false', STRING, 'null', '[', '{', '$', '$$', NUMBER, 'function', '-', '$each', '$sift', '$reduce', '$filter', '$map', VAR_ID, ID}, line 1:20 at [@9,20:20=')',<4>,1:20]: no viable alternative at input '1234/)'
嘿,我有一段时间没有在这里发布了,谢谢您的帮助。