gpt4 book ai didi

java - 解析嵌套聚合查询响应

转载 作者:行者123 更新时间:2023-11-30 07:06:39 25 4
gpt4 key购买 nike

这是嵌套 ES 聚合查询的结果。我需要解析此响应并将其转换为新的 JSON 格式。从以下 JSON 中,我唯一感兴趣的字段是值 key_as_a_string 以及每个键的苹果和橙子的值。

"aggregations": {
"Inner_aggregation": {
"doc_count": 366,
"Hours_aggregation": {
"doc_count": 366,
"by_day": {
"buckets": [
{
"key_as_string": "2016-01-11",
"key": 1452556800000,
"doc_count": 1,
"Apples": {
"value": 5
},
"Oranges": {
"value": 3
}
},
{
"key_as_string": "2016-01-12",
"key": 1452556800000,
"doc_count": 1,
"Apples": {
"value": 43
},
"Oranges": {
"value": 2
}
},
.........,
.........
]
}
}
}
}
}

我可以使用 Jackson objectmapper 或使用 sr.getAggregations().get("histogram_name") 方法解析它,然后迭代集合。想知道是否有简单的方法。

所需的 JSON 格式

{
"Results": [{
"key_as_string": "2016-01-11",
"Apple_to_Orange_Ratio": 0.112
}, {
"key_as_string": "2016-01-12",
"Apple_to_Orange_Ratio": 0.12
}]
}

通过简单除以苹果和橙子的数量即可得出比率。

最佳答案

当您的 Java 表示与复杂的嵌套结构有很大不同时,将 json 直接映射到 Java 类可能没有帮助。您可以动态处理此类数据。

这是一种使用 Java 8 和库处理此类数据的方法 Dynamics .

我们将 json 解析为映射/列表结构,并将其包装为动态实例

Map jsonMap = new ObjectMapper().readValue(exampleJson, Map.class);
Dynamic jsonData = Dynamic.from(jsonMap);

这为我们提供了一种空安全且流畅的方式来处理这种嵌套结构。在本例中,我们对桶感兴趣,如果能够轻松获得这些桶就太好了。

List<MyResult> results = jsonData
.dget("aggregations.Inner_aggregation.Hours_aggregation.by_day.buckets")
.children()
.map(bucket -> new MyResult(bucket))
.collect(toList());

现在我们的类 MyResult 可以处理存储桶数据,它也是一个动态实例。

public class MyResult {
private final Dynamic bucket;

public Result(Dynamic bucket) {
this.bucket = bucket;
}

public String getKey() {
return bucket.get("key_as_string").asString();
}

public double getAppleToOrangeRatio() {
double apples = bucket.dget("Apples.value").convert().intoDouble();
double oranges = bucket.dget("Oranges.value").convert().intoDouble();
return oranges / apples;
}
}

我们可以访问比率。

double appleToOrangeRatio = results.get(0).getAppleToOrangeRatio();
// 0.6

参见https://github.com/alexheretic/dynamics获取源代码、文档和示例。

关于java - 解析嵌套聚合查询响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995977/

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