Почему синтаксис использования регулярных выражений, который работает в приложении "Exerciser", не работает в jsonata4java? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь использовать jsonata4java, используя оператор $ match и регулярное выражение в предикате.

Код jsonata был успешно протестирован в приложении JSonata Exerciser, но в моем тесте java происходит сбой с сообщениями об ошибках, которые появляютсяприйти из antlr (лексер / парсер).Тренажер использовался с идентичными входами.

Попробовали: 1) Обновление до последней версии jsonata4java (1.0.5).2) Различные способы экранирования определенных символов (снятые в темноте) 3) упрощение выражения 4) использование лямбда-стиля в предикате (tin ~> / regex /) вместо совпадения 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: $$[$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/)'

Привет, я давно не писал здесь, спасибо за помощь.

...