java json foreach_Java JSONArray.forEach方法代码示例

本文展示了如何在Java中使用JSONArray的forEach方法遍历和处理JSON数据。通过示例代码详细解释了从JSON响应中提取并处理嵌套数组的方法,包括解析JSONObject、获取aggregations、buckets等字段的值,并进行数据处理和存储。
摘要由CSDN通过智能技术生成

import org.json.JSONArray; //导入方法依赖的package包/类

public static Map> offset(String group, String topic, String start, String end) {

Map> statsMap = new HashMap>();

String indexPrefix = SystemManager.getConfig().getEsIndex();

try {

ElasticsearchAssistEntity assistEntity = ScrollSearchTemplate.getInterval(start, end);

List indexes = new ArrayList();

assistEntity.getIndexs().forEach(a -> {

indexes.add(indexPrefix + "-" + a);

});

String[] esHost = SystemManager.getConfig().getEsHosts().split("[,;]")[0].split(":");

String url = "http://" + esHost[0] + ":" + esHost[1] + "/" + String.join(",", indexes) + "/"

+ SystemManager.getElasticSearchOffsetType() + "/_search?ignore_unavailable=true&allow_no_indices=true";

ResponseEntity response = REST.exchange(url, HttpMethod.POST,

new HttpEntity(ScrollSearchTemplate.getOffset(group, topic, assistEntity), headers), String.class);

String searchResult = response.getBody();

JSONObject temp = new JSONObject(searchResult);

JSONArray temp2 = temp.getJSONObject("aggregations").getJSONObject("aggs").getJSONArray("buckets");

List stats = new ArrayList();

temp2.forEach(obj -> {

JSONObject item = (JSONObject) obj;

JSONArray xx = item.getJSONObject("group").getJSONArray("buckets");

for (int i = 0; i < xx.length(); i++) {

JSONObject item2 = xx.getJSONObject(i);

JSONArray xxx = item2.getJSONObject("topic").getJSONArray("buckets");

for (int j = 0; j < xxx.length(); j++) {

JSONObject item3 = xxx.getJSONObject(j);

stats.add(new OffsetStat(item.getLong("key"), item2.get("key").toString(), item3.get("key").toString(),

item3.getJSONObject("offset").getLong("value"), item3.getJSONObject("lag").getLong("value")));

}

}

});

stats.forEach(a -> {

String topicName = a.getTopic();

if (topicName == null || topicName.length() == 0) {

topicName = "empty";

}

if (statsMap.containsKey(topicName)) {

statsMap.get(topicName).add(a);

} else {

List arr = new ArrayList();

arr.add(a);

statsMap.put(topicName, arr);

}

});

statsMap.forEach((key, val) -> {

for (int i = val.size() - 1; i > 0; i--) {

val.get(i).setOffset(val.get(i).getOffset() - val.get(i - 1).getOffset());

}

val.remove(0);

});

} catch (Exception e) {

// TODO

LOG.error("Damn...", e);

}

return statsMap;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值