我有一个如下所示的 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
映射时将键设置为小写。我研究了 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/