java - 使用Java JsonPath获取JSON父节点

标签 java json parent jsonpath

我在尝试使用 Java JsonPath 查询 JSON 时遇到一些问题。

我有一个很大的 json,其中包含有关人员位置的信息(数千行)。用于查找此人位置的字段是您的 macAdreess。 macAdreess 不重复,换句话说,当我查询特定的 macAdreess 时,我得到了一次结果。

这是我的 Json 的一小部分:

{
   "readings": [
      {
         "value": {
            "floorRefId": "-4564288095083560912",
            "x": 86.405304,
            "y": 64.4601,
            "z": 0
         },
         "tags": {
            "macAddress": "f8:e0:79:82:95:92"
         },
         "timestamp": 1494620148598
      },
      {
         "value": {
            "floorRefId": "-4564288095083560912",
            "x": 86.540474,
            "y": 64.12458,
            "z": 0
         },
         "tags": {
            "macAddress": "f4:f5:24:96:d5:cd"
         },
         "timestamp": 1494620148598
      },
      {
         "value": {
            "floorRefId": "-4564288095083560912",
            "x": 86.31584,
            "y": 64.410446,
            "z": 0
         },
         "tags": {
            "macAddress": "f4:f5:24:2a:9c:13"
         },
         "timestamp": 1494620148598
      },
   ],
   "gateway_uuid": "cccccccc-9f70-4d93-94be-2fa7e15ef292",
   "status": "running"
}

我需要每五秒在 JSON 中查询一个 macAddress,因此如果我需要遍历所有 JSON 内容,就会遇到性能问题。

然后我尝试使用 Java JsonPath API 来查询 macAdreess 并且它运行正常。但我需要获取父节点来获取位置字段。

使用此代码:

public static void main(String[] args) throws Exception {
    String json = getJsonAsString();
    List<Map<String, Object>> expensive = JsonPath.parse(json).read("$..[?(@.macAddress=='f4:f5:24:96:d5:cd')]");
    System.out.println(expensive);
}

我得到了这个结果:

[{"macAddress":"f4:f5:24:96:d5:cd"}]

最佳答案

您需要从父级查询,并且不要使用$..深度扫描。

$.readings[?(@.tags.macAddress=="f4:f5:24:96:d5:cd")]

但是如果您知道只有一个,您最好自己线性扫描数据。性能会更高

关于java - 使用Java JsonPath获取JSON父节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958449/

相关文章:

java - Spring Data JPA - 具有无限递归的双向关系

异常类中的 php 父构造函数

java - 如何在Spring Controller 中使用JSON发送继承的对象?

java - Eclipse 项目上的多个 JDBC 文件

json - Jq:如何将子成员移动到父成员?

javascript - 在 JavaScript 中访问用户 session 数据时出现问题

android - 在同一个 TextView 中显示字符串数组,时间间隔为 5 秒

jquery - 即使在回发后也使用 jquery 更改 li 的颜色或父级

javascript - 选择父级及其所有 sibling

java - 有没有办法将 FindIterable<Document> 转换为 JSONArray 字符串?