gpt4 book ai didi

java - 使用 GSON 将 JSON 转换为 Java 对象时,如何覆盖 Java 映射?

转载 作者:搜寻专家 更新时间:2023-11-01 07:42:02 24 4
gpt4 key购买 nike

我有一个 JSON 字符串,如下所示:

{
"status": "status",
"date": "01/10/2019",
"alerts": {
"labels": {
"field1": "value1",
"field2": "value2",
"field3": "value3",
"field100": "value100"
},
"otherInfo" : "other stuff"
},
"description": "some description"
}

我对应的 Java 类如下所示:

public class Status {
private String status;
private String date;
private Alerts alerts;
private String description;
}

public class Alerts {
private Map<String, String> labels;
private String otherInfo;

public Map<String, String> getLabels() {
return labels();
}
}

我正在使用这个将给定的 JSON 解析为 Java 对象:

Status status = gson.fromJson(statusJSONString, Status.class);

这也为我提供了来自 Status 类的 Alerts 对象:

Alerts alerts = status.getAlerts();

这是我的问题:

让我们考虑一下标签:

我想让 label 映射中的键不区分大小写。因此,例如,如果提供的键/值对是 "field1": "value1""Field1": "value1""fIeLD1": “value1”,我希望能够通过简单地调用 alerts.getLabels.get("field1") 来检索它们。

理想情况下,我希望在最初创建 labels map 时将键设置为小写。我查看了 Gson 反序列化示例,但我不清楚具体如何处理。

最佳答案

您在这里无能为力。即使你扩展了 HashMap,问题是当 JSON 被反序列化时,它不会调用本地方法。你可以做的是以下,但它相当麻烦:

import java.util.HashMap;

public class HashMapCaseInsensitive extends HashMap<String, String> {

private boolean convertedToLower = false;

@Override
public String put(String key, String value) {
if(!convertedToLower){
convertToLower();
}
return super.put(key.toLowerCase(), value);
}

@Override
public String get(Object key) {
if(!convertedToLower){
convertToLower();
}
return super.get(key.toString().toLowerCase());
}

private void convertToLower(){
for(String key : this.keySet()){
String data = this.get(key);
this.remove(key);
this.put(key.toLowerCase(), data);
}
convertedToLower = true;
}

}

关于java - 使用 GSON 将 JSON 转换为 Java 对象时,如何覆盖 Java 映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54912746/

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