java - 获取无法编译内联过滤器:
问题描述
我试图使用我在 maven repo 之后使用的带有 json 路径的查询来获取 json 数组
我使用了来自 maven 的 com.jayway.jsonpath 版本 2.4.0
json是:
{
"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)
解决方案
正确的 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());
}
}
推荐阅读
- python - 使用 configparser 为多个环境配置
- rust - 在迭代中使用 Rust 中的泛型 From-Trait
- firebase - 没有为“对象”类型定义运算符“[]”。尝试定义运算符 '[]'.dartundefined_operator
- swift - NSBezierPath - 将 2 个 NSBezierPaths 的交集计算为 NSBezierPath?
- reactjs - 从新的子窗口调用函数而不是父窗口
- python - 有没有更快的方法将大量字典转换为 pandas DataFrame?
- javascript - Chrome 扩展清单 v3 DOM 注入到 chrome 的 PDF 查看器?
- html - 我应该添加哪些 CSS 属性以使滚动显示在此表中?
- python - Matplotlib - 为什么我的箭袋图总是关闭?
- flutter - Flutter:当应用程序从后台或关闭状态打开时显示一个snackbar