有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从json响应中读取不区分大小写的键名

下面是我的json格式代码:

{
    "topic": "Employee",
    "message": {
        "Id": "IND01",
        "data": {
            "salary": 50000
        }
    }
}

诸如topicmessageIddata等键名不区分大小写。如何从这个json响应体获取密钥


共 (2) 个答案

  1. # 1 楼答案

    如果可以将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();
        }));
    }
    

    请注意,要映射的演员阵容可能有点过于仓促,但为了简单起见,我选择了它

    编辑:

    要在不区分大小写的情况下搜索(顶级)密钥:

    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;
    }
    
  2. # 2 楼答案

    首先,您的JSON不可用。我相信这是你的问题,它会解决你的其他问题。 试试看

    {
        "topic": "Employee",
        "message": {
            "Id ": "IND01",
            "data ": {
    
                "salary ": 50000
            }
        }
    }
    

    在您的情况下,这是一个有效的JSON。从今往后,学习JSON的正确格式,并使用任何JSON验证器来验证JSON