为什么在“ Exerciser”应用程序中使用正则表达式的语法在jsonata4java中不起作用?

时间:2019-04-24 15:37:35

标签: java regex jsonata

我试图通过$ 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/)'

嘿,我有一段时间没有在这里发布了,谢谢您的帮助。

0 个答案:

没有答案