java - 如何处理带有@的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;
}
解决方案
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;
}
推荐阅读
- objective-c - 解析服务器数据未在应用程序和今日扩展程序之间共享
- google-sheets - 如何将数据从谷歌电子表格的一列移动到另一个谷歌电子表格的行?
- oracle - PLSQL 过程中的 IF EXISTS 语句
- java - 如何从 ClientResponse (Jersey Client) 获取连接和读取时间
- xamarin.android - IsNullOrEmtpy 没有响应,应用程序让我崩溃
- excel - 用公式填充单元格,调整一个字段并保留另一个字段
- php - 三元运算符返回false但执行左侧?
- python - 如何将我的 numpy 数组转换为 pandas 数据框?
- regex - 如何使用正则表达式将空格附加到特定行的末尾
- wordpress - 尝试将选项卡添加到 wordpress 定制器后出现错误 500