У меня есть следующий документ JSON-LD, полностью действительный в т. Е. https://json -ld.org / plays / / 1003 *:
https://gist.github.com/viggis75/27129127a1d3bd84b04f8af4f8e83ff4
Я пытаюсь использовать JsonPath для извлечения узлов из этого документа, но я испытываю затруднения, когда хочу создать фильтр с предикатами, которые соответствуют полям с @ в нем.
Документ JSON-LD, связанный с указанным выше, имеет два порядка, но в идеале я хотел бы, например, получить все заказы, где orderDelivery.provider.employee [@id] - это заданный идентификатор, который я предоставляю в качестве ввода.
или я хотел бы получить все заказы, где orderDelivery [@type] равен "ParcelDelivery" или что-то еще, что я предоставляю в качестве входных данных для фильтра.
Код, который я написал до сих пор, выглядит следующим образом:
JsonArray getOrdersByFoo (String orderDeliveryType) выбрасывает NoOrdersForDriverFoundException {
InputStream ordersAsStream = null; // здесь я читаю документ JSON-LD в
Filter ordersByOrderDeliveryTypeFilter = Filter.filter(Criteria.where("orderDelivery[@type]").eq(orderDeliveryType));
List<Map<String, Object>> orders = JsonPath.parse(ordersAsStream).read("$[*][?]", ordersByOrderDeliveryTypeFilter);
if(orders == null || orders.isEmpty()) {
throw new NoOrdersForDriverFoundException();
}
JsonReader jsonReader = Json.createReader(ordersAsStream);
JsonArray ordersAsJsonArray = jsonReader.readArray();
return ordersAsJsonArray;
}