Получение Не удалось скомпилировать встроенный фильтр: - PullRequest
0 голосов
/ 28 января 2020

Я пытался получить массив json, используя запрос с json путем, который я использовал после репозитория maven

Я использовал com.jayway.jsonpath версии 2.4.0 из maven

Json Is:

{
    "verdict": [
        {
            "firstSeenOn": "2015-01-21T07:56:00.000+0000",
            "lastSeenOn": "2019-05-14T14:35:00.000+0000",
            "reputationStatus": "KNOWN",
            "scannerCount": 43,
            "scannerPercentage": 2,
            "threatLevel": 0,
            "trustFactor": 2,
            "sha256": "b80ff3bb189960738bc94973c7bc25e541c1bdff5b9c1c69973a13345ffbc3c3"
        },
        {
            "reputationStatus": "UNKNOWN",
            "scannerCount": 0,
            "scannerPercentage": 0,
            "threatLevel": 0,
            "trustFactor": 0,
            "sha256": "06a4feb0ff348dc5a8951b7f20e5dbf30d733ff2ecf6f204fd55fb8348c99e85"
        }


    ]

}

Я использовал json путь:

$.verdict.[?(@.["reputationStatus"]=="KNOWN")].sha256

и ошибка

com.jayway.jsonpath.InvalidPathException: Could not compile inline filter : [?(@.["reputationStatus"]=="KNOWN")]
    at com.jayway.jsonpath.internal.filter.FilterCompiler.compile(FilterCompiler.java:47)
    at com.jayway.jsonpath.internal.path.PathCompiler.readFilterToken(PathCompiler.java:255)
    at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:107)




    ... 34 common frames omitted
Caused by: com.jayway.jsonpath.InvalidPathException: Could not parse token starting at position 2. Expected ?, ', 0-9, * 
    at com.jayway.jsonpath.internal.path.PathCompiler.fail(PathCompiler.java:387)
    at com.jayway.jsonpath.internal.path.PathCompiler.readNextToken(PathCompiler.java:109)



1 Ответ

1 голос
/ 28 января 2020

Правильный Json Путь

$.verdict[?(@.reputationStatus=="KNOWN")].sha256

, который возвращает

[
  "b80ff3bb189960738bc94973c7bc25e541c1bdff5b9c1c69973a13345ffbc3c3"
]

РЕДАКТИРОВАТЬ: Я пытался использовать библиотеку jsonpath и оба json выражения пути дают правильный вывод.

import com.jayway.jsonpath.JsonPath;

import net.minidev.json.JSONArray;

public class JsonPathExample {

    private static final String json = "JSON STRING";

    public static void main(String[] args) {
        JSONArray output = JsonPath.read(json, "$.verdict[?(@.reputationStatus==\"KNOWN\")].sha256");
        System.out.println(output.toJSONString());
        JSONArray output2 = JsonPath.read(json, "$.verdict.[?(@.[\"reputationStatus\"]==\"KNOWN\")].sha256");
        System.out.println(output2.toJSONString());
    }

}

...