使用Java JsonPath获取JSON父节点

时间:2017-05-13 22:11:20

标签: 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"
}

我需要每隔五秒查询一个macAddress到JSON,所以如果我需要遍历所有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);
}

我得到了结果:

  

[{&#34; MACADDRESS&#34;:&#34; F4:F5:24:96:D5:CD&#34;}]

1 个答案:

答案 0 :(得分:0)

您需要向父母查询,不要使用$..深度扫描。

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

但如果您知道只有一个,那么您最好自己线性扫描数据。这将是更高效的