gpt4 book ai didi

java - 动态地从 json 字符串创建和读取树数据结构

转载 作者:行者123 更新时间:2023-11-29 05:56:55 26 4
gpt4 key购买 nike

几天来我一直在尝试开发一个动态查询生成器。但是我在构建它时遇到了问题。

我复活的是这样一个json。

{"category":"Case Law","query":{"AND":{"Year":{"having":"","exact":"","any":"","none":""},"AND":{"Report":{"having":"","exact":"","any":"","none":""},"Citation":{"having":"","exact":"","any":"","none":""}}}}}

这是一个更易读的方式

Array
(
[category] => Case Law
[query] => Array
(
[OR] => Array
(
[Year] => Array
(
[having] => some
[exact] => values
[any] => might
[none] => have
)

[AND] => Array
(
[Report] => Array
(
[having] =>
[exact] =>
[any] =>
[none] =>
)

[Citation] => Array
(
[having] =>
[exact] =>
[any] =>
[none] =>
)

)

)

)

)
  • 这个 json 可以根据用户输入改变(可以有更多的深度或更少)。
  • 我想做的是为 apache 创建一个搜索查询lucene ...(目前让我们假设叶值只是字符串。)

必须是像这样的东西(我需要的)

(Year:another values OR (Report:some valeus AND Citation:some valeues))

我尝试使用 Jettison 库并使用 DefaultMutableTreeNode 来创建树结构。但它没有像我预期的那样工作。然后我尝试了递归函数,但它也没有工作

我想知道有没有可能创造出这种东西。如果是怎么办。

非常感谢您的尝试!提前致谢。

最佳答案

好的,现在需求很明确了,这里是解决方案

定义你的操作

enum MyOperator {

AND,
OR

}

写一个类来保存你的原子操作

class AtomicOperation {

Object lhs;
Object rhs;
MyOperator operator;

}

现在如果你想要类似的东西(年份:另一个值或(报告:一些值和引文:一些值))

您的 JSON 应该如下所示:

String jsonString = {{Year:['2001','2002']} OR {{Report:['Report1']} AND {Citation:['Citation1']}}}

所以首先将这个 JSON 转换为 AtominOperation 类使用代码

ConvertJsonToObject.getFromJSON(jsonString,AtominOperation.class);

GSON will cast it to a Simple AtominOperation Object with operation "OR"
and lhs,rhs as 2 LinkedHashMaps (Default behaviour of GSON)

Now use the below method to get the proper AtomicOperation Object from the
above AtomicOperation Object.

public static AtomicOperation deriveFromJSON(AtomicOperation operation) {

if (operation.getLhs().getClass().equals(LinkedHashMap.class)) {
AtomicOperation leftOperation = deriveFromJSON(ConvertJsonToObject
.getFromJSON(ConvertJsonToObject.toJSON(operation.getLhs()),
AtomicOperation.class));
AtomicOperation rightOperation = deriveFromJSON(ConvertJsonToObject
.getFromJSON(ConvertJsonToObject.toJSON(operation.getRhs()),
AtomicOperation.class));
return new AtomicOperation(leftOperation, operation.getOperator(),
rightOperation);
}
return operation;

}

最终的 AtomicOperation 对象将是您想要的。 :)

关于java - 动态地从 json 字符串创建和读取树数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com