java - 使用 gson 解析嵌套列表(lisp s 表达式)

标签 java gson

我正在尝试(反)序列化可以通过 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/

相关文章:

java - 使用Gson反序列化另一个对象内的对象数组

java - Apache Spark : TaskResultLost (result lost from block manager) Error On cluster

java - 错误: Package does not exist Android Studio

java - Android计算两个日期之间的天数

java - Netbeans:每次我编译时,内存使用率总是越来越高

json - 使用 gson 和 Retrofit 2 将所有 JSON 存储在 Map 中

使用信号量和监视器的 Java Unisex 浴室

java - 将嵌套 JSON 键转换为大写

java - 通过 JSON 加载 Hashmap

java - 如何在 JsonSerializer 中使用 Type 参数?