Java 如何从json响应中读取不区分大小写的键名
下面是我的json格式代码:Java 如何从json响应中读取不区分大小写的键名,java,json,case-insensitive,Java,Json,Case Insensitive,下面是我的json格式代码: { "topic": "Employee", "message": { "Id": "IND01", "data": { "salary": 50000 } } } 关键名称,如主题、消息、Id和数据不区分大小写。如何从这个json响应体中获取密钥?首先,您的json不可用。我相信这是您的问题,它将解决您的其他问题。 试一试 在您的情况下,这是一个有效的JSON。此后,
{
"topic": "Employee",
"message": {
"Id": "IND01",
"data": {
"salary": 50000
}
}
}
关键名称,如
主题
、消息
、Id
和数据
不区分大小写。如何从这个json响应体中获取密钥?首先,您的json不可用。我相信这是您的问题,它将解决您的其他问题。
试一试
在您的情况下,这是一个有效的JSON。此后,请学习JSON的正确格式,并使用任何JSON验证器验证JSON。如果您可以将JSON转换为映射,则可以重新映射整个映射(递归),将每个键转换为其小写值 比如:
public static Map<String,Object> convertToLowerCaseKeys(Map<String,Object> map){
return map.entrySet().stream().collect(Collectors.toMap(e -> e.getKey().toLowerCase(), e -> {
if(e.getValue() != null && e.getValue() instanceof Map){
return convertToLowerCaseKeys((Map<String,Object>)e.getValue());
}
return e.getValue();
}));
}
publicstaticmap-converttolowercekeys(Map-Map){
返回map.entrySet().stream().collect(Collectors.toMap(e->e.getKey().toLowerCase(),e->{
if(e.getValue()!=null&&e.getValue()映射实例){
返回convertToLowerCaseKeys((Map)e.getValue());
}
返回e.getValue();
}));
}
请注意,要映射的演员阵容可能有点过于仓促,但为了简单起见,我选择了它
编辑:
要在不区分大小写的情况下搜索(顶级)键,请执行以下操作:
public static Object getCaseInsensitive(Map<String,Object> map, String key){
if(key == null){
return map.get(null);
}
Optional<String> optional = map.keySet().stream().filter(e -> e != null && e.toLowerCase().equals(key.toLowerCase())).findAny();
if(optional.isPresent()){
return map.get(optional.get());
}
return null;
}
公共静态对象GetCaseSensitive(映射映射,字符串键){
if(key==null){
返回map.get(null);
}
可选=map.keySet().stream().filter(e->e!=null&&e.toLowerCase().equals(key.toLowerCase()).findAny();
if(可选的.isPresent()){
返回map.get(可选的.get());
}
返回null;
}
您应该尝试将您的问题重新表述为实际问题。您对我提出的问题1不清楚。您的问题没有很好地表达、清楚,甚至没有一个可行的JSON字符串。快速回答的概率与问题的清晰度成正比。将特定的密钥名称读作不区分大小写如何?检查转换为小写的实际密钥与转换为小写的要测试的密钥之间是否相等?请详细说明答案@Jeremy GrandI正在使用post方法调用Rest API在其中,我将此json格式作为请求体传递。你能告诉我,我应该在哪里包含这个getCaseSensitive方法@Jeremy Grands?CaseSensitive读取必须在API后面完成。你是你发布到的API的作者吗?或者您刚刚在他们的文档中读到json键不区分大小写?
public static Object getCaseInsensitive(Map<String,Object> map, String key){
if(key == null){
return map.get(null);
}
Optional<String> optional = map.keySet().stream().filter(e -> e != null && e.toLowerCase().equals(key.toLowerCase())).findAny();
if(optional.isPresent()){
return map.get(optional.get());
}
return null;
}