[英]Parsing JSON and Evaluating expressions from its fields
我有一个 JSON 文档,我从中找到了一种使用JSON-Path库解析和提取其中值的方法
我必须使用已解析的 JSON 中的变量来评估规则/表达式。
例如:
{maxAge:25, minAge:20, age:25}
Java 中提供了哪些相同的库?
有几个 java 库允许您解析 JSON。 两个主要的是 Jackson-JSON 和 Gson。 两者都是事实上的标准。 我个人的偏好是 Jackson。
这是解析 JSON 的最简单方法:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModules(new JavaTimeModule());
ObjectReader objectReader= objectMapper.reader();
Map<String, Object>data = objectReader.forType(Map.class).readValue(s);
这里是需要的maven神器
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.12.3</version>
</dependency>
这里是 github 站点: https://github.com/FasterXML/jackson 。
这是相关的Javadoc
想出办法,显然,我不需要 JSON 路径。 我可以直接在我的代码中使用 javascript。 所以我在 javascript 中写了规则
public static void main(String[] args) {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
String json = "{\"maxAge\":25, \"minAge\":20, \"age\":25}";
String rule = "(x.maxAge)-(x.minAge) > 0;";
jsEngine.put("x", json);
try {
jsEngine.eval("function test(abc){" + "var x=JSON.parse(abc);" + "return " + rule + "}");
Invocable inv = (Invocable) jsEngine;
boolean result = (Boolean) inv.invokeFunction("test", json);
if (result) {
System.out.println("Alert rule triggered");
}
} catch (ScriptException ex) {
ex.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.