这篇文章主要介绍了解决从Map、JSONObject取不存在键值对时的异常情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
从Map、JSONObject取不存在键值对时异常
1.在Map中取不存在的键值对时不会报异常
只会返回null
@Test
    public void testMap() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("d", 10);
        Object b = map.get("c");
        System.out.println(b);
    }
//打印结果是:null。结论:从map中取出不存在的键值对时不会报异常,会返回null。
2.在JSONObject中取不存在的键值对时分两种情况
利用jSONObject.get(Object key)方法及get(String key)取不存在的键值对时不会报异常,会返回null;但是利用jSONObject.getxxx(String key)方法取时会报空指针异常:
@Test
    public void testJSONObject() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("d", 10);
        JSONObject jSONObject = JSONObject.fromObject(map);
        int xx = jSONObject.getInt("d");
        System.out.println(xx);
        // 从jSONObject中用get(Object key)方法取出不存在的键值对时不会报异常,会返回null
        Object y = jSONObject.get("dd");
        System.out.println(y);
        // 从jSONObject中用getxxx(String key)方法取出不存在的键值对时报异常
        String y2 = jSONObject.getString("dd");
        System.out.println(y2);
    }对null处理时会报空指针异常:
@Test
    public void testNull() {
        Object o = null;
        System.out.println(o);
        String s = (String) o;
        System.out.println(s);
        // System.out.println(s.getClass());
        User u = (User) o;
        System.out.println(u);
        // System.out.println(u.getClass());
    }
//打印结果:
//null
//null
//null分析可知:不管null是何种类型,Object null或者String null或者其他类型的null,调用getClass()方法时都会报空指针异常。
如果是Object null,则可以转为其他类型的null,因为其他类型都是Object的子类。
但是其他类型的null不能随便转类型,除非是有父子关系的类型。
例如,如果String类型的想转为User类型的,就会有编译错误,说Cannot cast from String to User。
遍历JSONObject获取键值对
看代码时遇到的,遍历JSONObject,获取键值对
Map<String, String> map = new HashMap<>();
JSONObject jsonObject = new JSONObject(jsonStr);//字符串转换成JSONObject
//jsonStr,例如:"{\"key\":\"value\",\"key1\":\"value1\"}"
Iterator<String> keys = jsonObject.keys();
while(keys.hasNext) {
    String key = keys.next();//获取key
    String value = jsonObject.getString(key);//获取value
    map.put(key, value);
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
本文标题为:解决从Map、JSONObject取不存在键值对时的异常情况
				
        
 
            
        - ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
 - SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
 - Spring Security权限想要细化到按钮实现示例 2023-03-07
 - 深入了解Spring的事务传播机制 2023-06-02
 - JSP页面间传值问题实例简析 2023-08-03
 - Java中的日期时间处理及格式化处理 2023-04-18
 - Java实现顺序表的操作详解 2023-05-19
 - Springboot整合minio实现文件服务的教程详解 2022-12-03
 - 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
 - JSP 制作验证码的实例详解 2023-07-30
 
						
						
						
						
						
				
				
				
				