Я пытаюсь использовать 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/)'
Привет, я давно не писал здесь, спасибо за помощь.