解决从Map、JSONObject取不存在键值对时的异常情况

目录
  • 从Map、JSONObject取不存在键值对时异常
    • 1.在Map中取不存在的键值对时不会报异常
    • 2.在JSONObject中取不存在的键值对时分两种情况
  • 遍历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);
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JSONObject toJSONString错误的解决

    目录 JSONObject toJSONString错误 1.com.alibaba.fastjson.JSONObject 继承了JSON 2.在使用时需要注意的地方 3.默认过滤掉值为null的key JSONUtils.toJSONString的一个坑 不需要判断使用StringUtils.isBlank进行判断 JSONObject toJSONString错误 1.com.alibaba.fastjson.JSONObject 继承了JSON 可以使用其2个重要的方法: Model m

  • 解决JSONObject.toJSONString()输出null的问题

    目录 JSONObject.toJSONString()输出null 代码 输出 看下SerializerFeature属性 不要盲目的使用JSONObject.toJSONString JSONObject.toJSONString()输出null 问题:fastjson的api种,jsonObject.toJsonString(),当值为null时,没打印出来 代码 JSONObject jsonObject = new JSONObject(); jsonObject.put("id&qu

  • Java将json对象转换为map键值对案例详解

    本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 比如json数据如下: {responseHeader:{status:0,QTime:0},spellcheck:{suggestions:{中国:{numFound:9,startOffset:0,endOffset:2,suggestion:[中国工商银行, 中国人民, 中国国际, 中国农业, 中国市场, 中国经济, 中国人, 中国广播, 中国文化]}},collations:{collation:中国工商银行}}} 如

  • 解决从Map、JSONObject取不存在键值对时的异常情况

    目录 从Map.JSONObject取不存在键值对时异常 1.在Map中取不存在的键值对时不会报异常 2.在JSONObject中取不存在的键值对时分两种情况 遍历JSONObject获取键值对 从Map.JSONObject取不存在键值对时异常 1.在Map中取不存在的键值对时不会报异常 只会返回null @Test     public void testMap() {         Map<String, Object> map = new HashMap<String, Obj

  • Go语言遍历map实现(访问map中的每一个键值对)

    map 的遍历过程使用 for range 循环完成,代码如下: scene := make(map[string]int) scene["route"] = 66 scene["brazil"] = 4 scene["china"] = 960 for k, v := range scene { fmt.Println(k, v) } 遍历对于Go语言的很多对象来说都是差不多的,直接使用 for range 语法即可,遍历时,可以同时获得键和值

  • python 实现二维字典的键值合并等函数

    这篇文章主要讲python中关于字典的一些具体操作,讲解的问题都是本人在实际编程中所遇到的问题,读者可以根据自己所遇到的问题具体问题具体分析. (1) 二维字典的键值合并: 先提供一个应用场景: 假设我有两个二维字典: room1 = {orderid1:{roomid1:pred1,roomid2:pred2},orderid2:{roomid3:pred3,roomid4:pred4}} room2 = {orderid1:{roomid1:pred5,roomid2:pred6},orde

  • Python 如何读取字典的所有键-值对

    如果字典中存储了一些值,我想要取出来该怎么操作呢? 1.我要取出字典中所有的键-值对 取出字典中所有的键-值对时,可以使用items()返回一个键值对列表,并配合for循环进行遍历 #创建一个存储一个学生的信息,通过遍历可以取出所有信息 student={'name':'xiaoming','age':11,'school':'tsinghua'} for key,value in student.items(): print(key+':'+str(value)) 输出: age:11 nam

  • Redis中键值过期操作示例详解

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key 在 n 毫秒后过期: expireat key timestamp:设置 key 在某个时间戳(精确到秒)之后过期: pexpireat key millisecondsTimestamp:设置 key 在某个时间戳(精确到毫秒)之后过期: 下面分别来看以上这些命令的具体实现. 1)expire:N

  • Java 把json对象转成map键值对的方法

    工具方法: 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 maven 引用jar包版本: <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20090211</version> </dependency> 工具类: package com.baofoo.admin.test; /

  • java 将jsonarray 转化为对应键值的jsonobject方法

    有时候我们再操作数据的时候,很多数据是jsonarry 格式的 如: [{"name":"测试数据","id":1},{"name":"测试数据2","id":2}] 这样的格式很类型表格数据类型.但是我们要取id 为1的name 这样我们就要先变量以便了.如果需要多次操作这样的类型,显得很麻烦. 这里的数据我们可以看出id 是唯一的.那么我们可以想办法将其转为jsonobject 这样

  • golang 实现对Map进行键值自定义排序

    看代码吧~ //自定义结构体,用来自定义排序 type RecentlyUpdateListMapSorter []map[string]interface{} //根据MapSorter.Keys进行倒序排序 func (ms *RecentlyUpdateListMapSorter) SortReverse() { sort.Sort(sort.Reverse(ms)) } //自定义排序方法(Len(),Less(),Swap()) func (ms *RecentlyUpdateList

  • vue数据字典取键值方式

    目录 vue数据字典取键值 vue项目的字典问题 在utils中写一个dict.js的文件 在main.js中引用刚才封装好的getDict方法 之后我们就可以在系统中使用 vue数据字典取键值 首先:项目里的数据字典路由已经配好 进入项目页面 引入数据字典 import { getTypeValue } from '@/api/dict/dictValue/index'; 创建前获取到字典 getTypeValue('org_attr_type').then(response => { thi

随机推荐