net.sf.json踩坑( net.sf.json.JSONNull cannot be cast to java.lang.String)

最近运营反馈偶尔有一两笔订单出现卡单,无法充值的问题。正好今天不是很忙就和同事一起定位问题。因为是一个比较老的项目,可能当时开发人员没有开发规范,所以对于异常日志仅仅是在控制台打印并没有记录到异常日志,因此现在去定位问题只能通过业务日志和代码入手,这种方法最好的就是采用排查法了,通过排查最终将问题锁定在一段json解析的代码上。由于隐私的问题我这里就自己写段代码复现吧。

import net.sf.json.JSONObject;

public class JsonTest {

    public static void main(String[] args) {
        String jsonStr = "{\"gameAcct\":\"\",\"gameArea\":\"\",\"gameName\":null,\"gameType\":\"\",\"goodsNum\":1}";
        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
        String gameName = jsonObject.get("gameName") == null ? "" : (String) jsonObject.get("gameName");
        System.out.println(gameName);
    }

}

我们可以看到gameName对应的取值就是null,因此在判断jsonObject.get(“gameName”) == null应该返回true,进而gameName的取值应该是""。一切看起来都是没有问题的,但是如果你们运行这段代码就会发现竟然抛出异常了在这里插入图片描述
以上运行环境是JDK1.6 json-lib2.3,然后我到mvnrepository去找了下json-lib,发现它从2010年就停更了,估计现在也就一些老项目用的比较多。
net.sf.json踩坑( net.sf.json.JSONNull cannot be cast to java.lang.String)_第1张图片

你可能感兴趣的:(开发笔记,java)