gpt4 book ai didi

java - 如何转换 Map> 扩展为 JsonObject

转载 作者:行者123 更新时间:2023-12-02 08:42:23 27 4
gpt4 key购买 nike

我正在尝试将 Map> 转换为 JSON 对象。我尝试了两种不同的转换方式。

  1. 使用对象映射器:

这里的代码看起来像但返回 null。

       @GetMapping("/showRawKafkaMetrics")
public String getMetrics() throws JsonProcessingException {
StringBuilder sb = new StringBuilder();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry
.getListenerContainers()) {
// The below map of metrics I'm trying to convert into json Object
Map<String, Map<MetricName, ? extends Metric>> metrics = messageListenerContainer.metrics();
metrics.forEach((clientid, metricMap) -> {
log.info("Client Id:"+sb.toString());
String json = null;
try {
json = objectMapper.writeValueAsString(metricMap);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
log.info("JSON Metrics :"+json);
metricMap.forEach((metricName, metricValue) -> {
log.info("------------ Metric name: " + metricName.name() + " ----------- Metric value: "
+ metricValue.metricValue() + LINE_BREAK);
});
});
}
String metrics = sb.toString();
return metrics;
}

****2. Using JSON Object 

Here is the code looks like:****
         @GetMapping("/showRawKafkaMetrics")
public String getMetrics() throws JsonProcessingException {
StringBuilder sb = new StringBuilder();
JsonObject jsonObject = new JsonObject();
for (MessageListenerContainer messageListenerContainer : kafkaListenerEndpointRegistry
.getListenerContainers()) {
// The below map of metrics I'm trying to convert into json Object
// The below map of metrics I'm trying to convert into json Object

Map<String, Map<MetricName, ? extends Metric>> metrics = messageListenerContainer.metrics();

metrics.forEach((clientid, metricMap) -> {
log.info("Client Id:"+sb.toString());
metricMap.forEach((metricName, metricValue) -> {
log.info("------------ Metric name: " + metricName.name() + " ----------- Metric value: "
+ metricValue.metricValue() + LINE_BREAK);
jsonObject.add(metricName.toString(), (JsonElement) metricValue);
log.info("JSON METRICS:"+jsonObject);
});
});
}
String metrics = sb.toString();
return metrics;
}

在这两种情况下我都得到空指针。任何人都可以建议我将指标映射转换为 JsonObject 的最佳方法。因此,我可以进一步处理它以创建仪表板。

最佳答案

让 Spring 为您做这件事。添加@ResponseBodyproduces = "application/json" .

问题是关于Map<String, Map<MetricName, ? extends Metric>> ,这是 messageListenerContainer.metrics() 返回的内容,但你有一个列表 messageListenerContainer对象,所以你真正想要的是 List其中,要转换为 JSON。

@GetMapping(path = "/showRawKafkaMetrics", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String getMetrics() {
List<Map<String, Map<MetricName, ? extends Metric>>> list = new ArrayList<>();
for (MessageListenerContainer container : kafkaListenerEndpointRegistry.getListenerContainers())
list.add(container.metrics());
return list;
}

关于java - 如何转换 Map<String, Map<MetricName, ?将 Metric>> 扩展为 JsonObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61299633/

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