文档章节

Gson解析value为null情况下空指针问题

xwlmdd
 xwlmdd
发布于 2017/03/14 12:24
字数 276
阅读 407
收藏 0

上周五,在解析json中遇到一个很坑的问题,就是解析Json字符串时出现value为null的时候,出现空指针异常。当时让

String password = jsonObject.get("password").getAsString();
		JsonElement passwordJsonEle = jsonObject.get("password");
		if(passwordJsonEle!=null){
			String password = passwordJsonEle.getAsString();
			System.out.println(password);
		}

发现会进入if语句块,所以比较奇怪,查看源码,发现Gson解析Gson时底层解析的key:value是用Map装取,而当vaule为null时则装入的是Gson自定义的JsonNull类对象。 源代码:

 /**
   * Adds a member, which is a name-value pair, to self. The name must be a String, but the value
   * can be an arbitrary JsonElement, thereby allowing you to build a full tree of JsonElements
   * rooted at this node.
   *
   * @param property name of the member.
   * @param value the member object.
   */
  public void add(String property, JsonElement value) {
          if (value == null) {
               value = JsonNull.INSTANCE;
          }
         members.put(property, value);
}

下面是测试代码

public class GsonIsNull {
	public static void testIsNull(){
		Gson gson = new Gson();
		String jsonString = "{\"name\":\"毛豆豆\",\"age\":24,\"password\":null}";
		JsonObject jsonObject = gson.fromJson(jsonString, JsonObject.class);
		String name = jsonObject.get("name").getAsString();
		System.out.println(name);
		String password = jsonObject.get("password").getAsString();
//空指针异常
//		JsonElement passwordJsonEle = jsonObject.get("password");
//		if(passwordJsonEle!=null){
//			String password = passwordJsonEle.getAsString();
//			System.out.println(password);
//		}

//正常
		JsonElement passwordJsonEle = jsonObject.get("password");
		if(!passwordJsonEle.isJsonNull()){
			String password = passwordJsonEle.getAsString();
			System.out.println(password);
		}

2017.3.14

© 著作权归作者所有

xwlmdd
粉丝 3
博文 3
码字总数 1637
作品 0
南昌
程序员
私信 提问
Gson格式转换Integer变为Double类型问题解决

问题描述 在前后端分离的开发模式下,前后端交互通常采用JSON格式数据.自然会涉及到json字符串与JAVA对象之间的转换。实现json字符串与Java对象相互转换的工具很多,常用的有Json、Gson、Fas...

明MikeWoo
2018/12/28
1K
2
GSON 解析json 无需在手动解析实体类

实体类的父类该类下 Json2bean 是把json转成实体类Json2ListBean 吧json转成 list GSON使用注意项 :json属性名和实体的属性名必须一致,不一致则赋值为空。 File Name:Bean.java Package Na...

tfc
2014/03/17
952
0
android中JSON的解析

android中网络数据传输是经常被用到的,通常我们使用xml或者json,而json更加轻量,便捷,我们使用的更多。我自己在项目中使用很多,今天就说说android中怎么去解析JSON,帮助自己总结内容,...

码农明明
2014/06/04
10.9K
0
使用Gson对复杂json对象的成员进行删选

2016/10/18更新 之前做的解析都是错误的,因为在最里层循环添加对象,会出现同一个key对应的对象被之后创建的对象覆盖。在边上大牛的协助之下,成功完成了在三层循环中正确地创建符合原json结...

大海
2016/10/16
92
0
Gson字符串转实体的问题

这里遇到一个比较棘手的问题,原来项目中使用的不是Gson,客户端在请求json数据时如果没有具体的数据内容会返回空字符串,如: {"result":{"errorMessage":"用户名/密码错误","errorCode":0......

Turman
2016/03/08
569
0

没有更多内容

加载失败,请刷新页面

加载更多

总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
44分钟前
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
48分钟前
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0
JAVA 利用时间戳来判断TOKEN是否过期

import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;/** * @descri......

huangkejie
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部