我正在尝试(反)序列化可以通过 gson 通过 AND/OR 连接的条件列表。
class Condition {
String property;
String operator;
String value;
}
有人能想到一种简单的方法来用 gson 解析类似“lisp s-expression”的数组并将它们存储到 java 对象中吗?
class MyObject {
List<Condition> conditions;
}
问题:这些条件之间存在AND/OR关系,如下所示。
示例:
隐式与:
[condition1, condition2, condition3]
显式的 AND:
["AND", condition1, condition2, condition3]
这两个表达式在语义上等同于(条件1 AND 条件2 AND 条件3)
隐式与/或:
[condition1, condition2, ["OR", condition3, condition4]]
显式的“与/或”:
["AND", condition1, condition2, ["OR", condition3, condition4]]
这两个表达式在语义上等同于(条件1 AND 条件2 AND (条件3 OR 条件4))
也许树状数据类型可以存储解析结果? 有谁可以建议一种更好的运输和存储和/或条件的方法
谢谢
最佳答案
我认为不将这个 json 解析为您自己的类,而是解析为 Gson 中已经存在的 JsonElement
类,并且对于您的任务类型来说足够抽象(事实上,它已经是一棵树了)是合适的)。
JsonElement ast = new JsonParser().parse(json);
您可以通过调用ast.isJsonArray()
检查它是否是一个数组,或者使用ast.getAsString()
获取字符串值
这可能不是最好的解决方案,但我认为如果适合您的需求,重用现有的 API 是合理的
关于java - 使用 gson 解析嵌套列表(lisp s 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194905/