Я хотел бы написать единичный тест для веб-службы с помощью json-path-assert. Учитывая этот JSON:Как искать массив с использованием JSONPath в Java?
[
["Some short name","Some parent","Some name"],
["Some short name 2","Some parent 2","Some name 2"]
]
я хотел бы, чтобы проверить, что родитель «Некоторые называют 2» является «Некоторые из родителей 2». Я не могу изменить структуру JSON, поскольку она продиктована сторонней библиотекой.
Вот выражение JSONPath я придумал:
$..[?(@[2] == 'Some name 2')][1]
Это выражение отлично работает и дает возвращает ожидаемый результат («Некоторые из родителей 2») в this JSON tool. Однако при использовании его в Java с использованием библиотеки JSONPath я получаю пустой результат вместо правильного значения:
import com.jayway.jsonpath.JsonPath;
import org.junit.Test;
public class TestJSONPath
{
@Test
public void testJsonPath() {
String json = "[[\"Some short name\",\"Some parent\",\"Some name\"]," +
"[\"Some short name 2\",\"Some parent 2\",\"Some name 2\"]]";
System.out.println(JsonPath.read(json, "$[1][1]")); // OK, returns 'Some parent 2'
System.out.println(JsonPath.read(json, "$..[?(@[2] == 'Some name 2')][1]")); // Not OK, returns an empty list
}
}
Вот мой pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Не могли бы вы мне помочь с идеями, как преодолеть эту проблему?