[Java]net.sf.json中JSONObject的put和element区别

本偏讲的所有json对象都是net.sf.json包下的

  1. JSONObject.put(Object key, Object value)
    key不能为null
    value会替换原来key对应的value
    value可以为null, 为null时移除原来的key (可以直接写put(“key”, null);)
    调用element(String key, Object value)方法
    返回Object是原来被替换的value, 可能为null

  2. JSONObject element(String key, Object value, JsonConfig jsonConfig)
    key 不能为 null
    value 会替换原来 key 对应的 value
    value 可以为值等于 null 的对象, 值为 null 时移除原来的 key (不可以直接写成 element(“key”, null);)
    返回 JSONObject 当前的JSONObject 对象

总结 : 大部分情况下没有区别, 但是有这样一个坑

/**
 * 使用put()方法这是对的
 */
 public void responseJson() {
    JSONObject data = new JSONObject();
    data.put("name", null);
    System.out.println(data.toString());
 }


/**
 * 使用put()方法, 这种方式会抛出空指针异常
 */
 public void responseJson() {
    JSONObject data = new JSONObject();
    // 运行时会抛出空指针异常, 因为之前没有key为"name"的复制, put返回的Object对象为null
    System.out.println(data.put("name", "123").toString());
 }

/**
 * 使用element()方法, 这种方式是正确的
 */
 public void responseJson() {
    JSONObject data = new JSONObject();
    // 运行时会正确输出 {"success":"123"}
    System.out.println(data.element("name", "123").toString());
 }

/**
 * 使用put()方法
 */
 public void responseJson() {
    JSONObject data = new JSONObject();
    data.put("name", "abc");
    // 运行时都会输出 abc
    System.out.println(data.put("name", null).toString());
    // 如果上一行运行, 这里就会抛出空指针异常
    System.out.println(data.put("name", "123").toString());
    // 这里会输出 {"success":"123"}
    System.out.println(data.toString());
 }


/**
 * 使用element()方法
 * 这样直接传入null编译器会直接报错, 代码不会编译通过
 */
 public void responseJson() {
    JSONObject data = new JSONObject();
    data.element("name", null);
    System.out.println(data.toString());
 }
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值