Gson中fromJson方法的返回值

Gson是google的一个Json库,使用非常简单。在Java中,只要引入包,创建对象就可以用了。

fromJson是Gson提供的一个方法。用来将一个Json数据转换为对象。调用方法是:new Gson().fromJson(Json_string,class)

需要注意的是,它会“尽量”转换出对象,哪怕得到的对象从数据上看是不完整的。

这样,可以通过一个Json数据转换出多种类型的对象,完全看使用者的需求。当用XSLT格式化XML文件时也是这种思路。

需要注意的是,在调用fromJson时,参数Json_string的情况决定了返回值的情况:null、对象还是抛出异常

  • 长度为0或者是null,那么返回结果是null;
  • 非空,但不符合Json格式,比如“abc”,会抛出异常;
  • 非空,则会返回一个非null的对象,无法获得值的成员变量使用缺省值,这就是上面的”尽量“的意思。当然,这种情况下,也有可能得到一个所有成员变量均为缺省值的对象;

再说下这个”尽量“。看起来是有副作用的。比如原始数据完全提供错了,通过fromJson也能得到一个对象实体。而这种实体可能是不可用的。所以,基本上需要自己增加对象可用性验证代码,在通过fromJson获得了非null对象后,进行一次验证。

当然好处也是大大的。比如可以将一次从服务器获取的数据转换成不同的对象,展示在不同的地方。所以,应该是利大于弊。

举例:

import com.google.gson.Gson;

public class TestJson
{
	private int age;
	private String name;

	public String show()
	{
		return new String("name:" + name + "/age:" + age);
	}

	public static void main(String[] args)
	{
		String[] source =new String[]{
				"",
				"abc",
				"{}",
				"{\"nick_name\":\"Jack\"}",
				"{\"name\":\"Anna\",\"id\":5}",
				"{\"name\":\"Pluto\",\"age\":15,\"id\":10}"
		};
		
		Gson g=new Gson();
		TestJson x=null;
		StringBuffer info=null;
		for(int i=0;i<source.length;i++)
		{
			info=new StringBuffer();
			info.append(i).append(":").append(source[i]).append("\n\t");
			try
			{
				x=g.fromJson(source[i], TestJson.class);
				info.append((x == null) ? "NULL" : x.show());
			}catch(Exception e)
			{
				info.append(e.getClass().getName());
			}
			System.out.println(info.toString());
		}
	}
}


运行的结果是:

0:
	NULL
1:abc
	com.google.gson.JsonSyntaxException
2:{}
	name:null/age:0
3:{"nick_name":"Jack"}
	name:null/age:0
4:{"name":"Anna","id":5}
	name:Anna/age:0
5:{"name":"Pluto","age":15,"id":10}
	name:Pluto/age:15


gson.fromJson()方法是Google Gson的一个方法,用于将JSON格式的字符串转换为Java对象。具体作用如下: 1. 将JSON格式的字符串转换为Java对象,例如: ```java String json = "{\"id\":1,\"name\":\"张三\"}"; Gson gson = new Gson(); User user = gson.fromJson(json, User.class); ``` 上述代码,通过fromJson()方法JSON格式的字符串转换为User对象,第一个参数为JSON格式的字符串,第二个参数为目标Java对象的class。 2. 将JSON格式的字符串数组转换为Java对象列表,例如: ```java String json = "[{\"id\":1,\"name\":\"张三\"},{\"id\":2,\"name\":\"李四\"}]"; Gson gson = new Gson(); Type type = new TypeToken<List<User>>(){}.getType(); List<User> userList = gson.fromJson(json, type); ``` 上述代码,通过fromJson()方法JSON格式的字符串数组转化为User对象列表,第一个参数为JSON格式的字符串数组,第二个参数为Type类型,可以使用TypeToken类创建Type类型。TypeToken类是Gson库提供的一个工具类,用于获取Java泛型类型的Type。 需要注意的是,在使用fromJson()方法时,要确保JSON格式的字符串和目标Java对象的属性名和类型一致,否则会抛出异常。另外,Gson库还提供了toJson()方法,用于将Java对象转换为JSON格式的字符串。例如: ```java User user = new User(); user.setUserId(1); user.setUserName("张三"); Gson gson = new Gson(); String json = gson.toJson(user); System.out.println(json); ``` 输出结果为: ```json {"id":1,"name":"张三"} ``` 上述代码,通过toJson()方法将User对象转换为JSON格式的字符串。需要注意的是,toJson()方法默认不会忽略空值属性,如果需要忽略空值属性,可以在创建Gson对象时设置GsonBuilder的serializeNulls()方法。例如: ```java User user = new User(); user.setUserId(1); user.setUserName(null); Gson gson = new GsonBuilder().serializeNulls().create(); String json = gson.toJson(user); System.out.println(json); ``` 输出结果为: ```json {"id":1,"name":null} ``` 可以看到,序列化后的JSON字符串包含了空值属性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值