Unable to evaluate the expression Method threw ‘net.sf.json.JSONException‘ exception.

本文探讨了使用net.sf.json包处理JSON字符串时遇到的一个问题:当JSON字段值为null时,通过get()方法获取该值并进行null判断会得到错误的结果。文章详细解释了此现象的原因,并提供了一个简单有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unable to evaluate the expression Method threw ‘net.sf.json.JSONException’ exception.

序列化JSON字符串,JSON中存储的值是null,通过get()方法获取到值后,为空判断得到的结果居然是false

对于不了解的同事来说:这个很坑…

	public static void main(String[] args) {
        String str = "{\"Content\":null}";
        JSONObject jsonObject = JSONObject.fromObject(str);
        Object content = jsonObject.get("Content");
        boolean isNull = (null == content);
        // 期望结果:true,实际输出结果:false
        System.out.println(isNull);
    }

之所以会有这种情况,是因为JSONObject.formObject()方法对参数进行序列化的时候对值为null字符串的进行了处理,大致处理如下:

  1. 判断值是否为"null"字符串;如果是则见第二步;
  2. 创建一个JSONObject,并且对象中的元素nullObject = true;
  3. 把原本的null值替换为第二步创建的对象。
    第二步源码

解决方案:使用net.sf.json.JSONUtils.isNull()

public static void main(String[] args) {
        String str = "{\"Content\":null}";
        JSONObject jsonObject = JSONObject.fromObject(str);
        Object content = jsonObject.get("Content");
        // boolean isNull = (null == content);
        //  把原本的为空判断替换为:net.sf.json.JSONUtils.isNull()
        boolean isNull = JSONUtils.isNull(content);
        // 期望结果:true,实际输出结果:true
        System.out.println(isNull);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值