Как работать с JSON-LD с @ в нем - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующий документ 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;        
}

1 Ответ

0 голосов
/ 13 мая 2018
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;        

}

...