使用 Java JsonPath 获取 JSON 父节点
Getting JSON parent node with Java JsonPath
我在尝试使用 Java Json 路径查询 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 运行 ok。但是我需要获取父节点才能获取位置字段。
使用此代码:
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 Json 路径查询 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 运行 ok。但是我需要获取父节点才能获取位置字段。
使用此代码:
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")]
但是如果你知道只有一个,你最好自己线性扫描数据。性能会更好