Jayway jsonpath, начинающийся с "/" в регулярном выражении
У меня возникают проблемы с jayway jsonpath, когда дело доходит до использования регулярного выражения, в котором есть xpath. Вот мой json:
{
"status": "success",
"resources": [
{
"id": "Attachment-20796b26-7a16-4a3d-b53c-b30d9f3cb798.TXT",
"name": "1996032897__test1.CREDITPRINTFILE",
"mimeType": "text/plain",
"url": "https://test.com"
}
]
}
Вот мое выражение: ресурсы [?(/__test1.CREDITPRINTFILE/.test(@. Name))]
Я получаю следующую ошибку:
Exception in thread "main" com.jayway.jsonpath.InvalidPathException: Expected path node
at com.jayway.jsonpath.internal.filter.ValueNode.asPathNode(ValueNode.java:53)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readExpression(FilterCompiler.java:204)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalANDOperand(FilterCompiler.java:189)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalAND(FilterCompiler.java:151)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalOR(FilterCompiler.java:131)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalANDOperand(FilterCompiler.java:184)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalAND(FilterCompiler.java:151)
at com.jayway.jsonpath.internal.filter.FilterCompiler.readLogicalOR(FilterCompiler.java:131)
at com.jayway.jsonpath.internal.filter.FilterCompiler.compile(FilterCompiler.java:77)
at com.jayway.jsonpath.internal.filter.FilterCompiler.compile(FilterCompiler.java:53)
at com.jayway.jsonpath.internal.path.PathCompiler.readFilterToken(PathCompiler.java:461)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:141)
at com.jayway.jsonpath.internal.path.PathCompiler.readPropertyOrFunctionToken(PathCompiler.java:237)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:151)
at com.jayway.jsonpath.internal.path.PathCompiler.readDotToken(PathCompiler.java:171)
at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:145)
at com.jayway.jsonpath.internal.path.PathCompiler.readContextToken(PathCompiler.java:124)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:58)
at com.jayway.jsonpath.internal.path.PathCompiler.compile(PathCompiler.java:75)
at com.jayway.jsonpath.JsonPath.<init>(JsonPath.java:101)
at com.jayway.jsonpath.JsonPath.compile(JsonPath.java:467)
at com.jayway.jsonpath.internal.JsonContext.read(JsonContext.java:87)
at daniel.TestJsonPath.main(TestJsonPath.java:72)
Я пробовал использовать то же выражение в онлайн-инструментах оценки: https://jsonpath.herokuapp.com/
Jayway - выдает ту же ошибку - узел ожидаемого пути Gatling, Nebhale - выдает ошибки, Goessner - дает мне действительный результат
Я использую последнюю версию jayway, я думаю -
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
Вопрос: Если jayway не решает такие выражения, существует ли какая-либо другая библиотека Java, которая может быть использована для их решения?
1 ответ
Предполагая, что вы ищете "ресурс, имя которого содержит __test1.CREDITPRINTFILE
", выражение jsonpath resources[?(@.name =~ /.*__test1\.CREDITPRINTFILE/)]
будет работать с Jayway. Проверено на https://jsonpath.herokuapp.com/