如何解决解析 JSON 并从其字段评估表达式
我有一个 JSON 文档,我从中找到了一种使用 JSON-Path 库解析和提取其中的值的方法
我必须使用解析的 JSON 中的变量来评估规则/表达式。
例如:
{maxAge:25,minAge:20,age:25}
- rule1 : $.maxAge-$.minAge>100 然后发送警报
- rule2 : $.age
Java 中有哪些可用的库?
解决方法
Json Path 只会让您解析 JSON 文件并读取其中的变量。您必须使用单独的 Java 库来评估表达式。看看讨论相同内容的这个 post。
我发现的另一篇关于纯数学表达式评估的有用帖子是 this 一个。
如果您能识别将成为表达式一部分的所有运算符,将会很有帮助。例如,算术运算符(+、-、/、*.)、等式和关系运算符(=、!=、)
,有几个 Java 库可以让您解析 JSON。两个主要的是 Jackson-JSON 和 Gson。两者都是事实上的标准。我个人更喜欢杰克逊。
这里是解析 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();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。