首页 > 解决方案 > 如何处理带有@的JSON-LD

问题描述

我有以下 JSON-LD 文档,在https://json-ld.org/playground/中完全有效:

https://gist.github.com/viggis75/27129127a1d3bd84b04f8af4f8e83ff4

我正在尝试使用 JsonPath 从该文档中获取节点,但是当我想使用 Predicates 进行过滤时,我正在苦苦挣扎,该 Predicates 与其中带有 @ 的字段匹配。

上面链接的 JSON-LD 文档有两个订单,但理想情况下,我想获取所有订单,其中 orderDelivery.provider.employee[@id] 是我作为输入提供的给定 ID。

或者,我想获取 orderDelivery[@type] 为“ParcelDelivery”的所有订单,或者我提供给过滤器的其他输入。

到目前为止,我编写的代码如下所示: JsonArray getOrdersByFoo(String orderDeliveryType) throws 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;        
}

标签: javajsonpath

解决方案


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;        

}


推荐阅读