Gson超量/少量转换

来源:互联网 发布:网络安全设备有哪10种 编辑:程序博客网 时间:2024/04/28 02:41

一:研究的问题:当把json字符串利用Gson转换成对应变量的对象时,如果json字符串中包涵的key-value键值对多于对象中的属性时,会不会不能转换?

过程:

1、新建一个Test类

package com.test;import java.util.HashMap;import java.util.Map;import com.google.gson.Gson;public class Test {public static <T> T jsonToObject(String json, Class<T> classOfT)throws Exception {Gson gson = new Gson();return gson.fromJson(json, classOfT);}public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("name", "hy");map.put("age", "20");map.put("sex", "male");String json = JsonUtil.toJson(map);System.out.println(json);try {Bean bean = jsonToObject(json, Bean.class);System.out.println(bean.getName());System.out.println(bean.getSex());} catch (Exception e) {e.printStackTrace();}}}

Test类中关联的jar包为gson-2.1.jar,和一个object转json字符串的工具类JsonUtil:

package com.test;import org.codehaus.jackson.map.ObjectMapper;import org.codehaus.jackson.type.JavaType;import org.codehaus.jackson.type.TypeReference;import org.springframework.util.Assert;/** * Util - JSON */public class JsonUtil {private static ObjectMapper mapper = new ObjectMapper();/** * 将对象转换为JSON字符串 * @param object 对象 */public static String toJson(Object object) {Assert.notNull(object);try {return mapper.writeValueAsString(object);} catch (Exception e) {e.printStackTrace();}return null;}/** * 将JSON字符串转换为对象 * @param json JSON字符串 * @param valueType 对象类型 */public static <T> T toObject(String json, Class<T> valueType) {Assert.notNull(json);Assert.notNull(valueType);try {return mapper.readValue(json, valueType);} catch (Exception e) {e.printStackTrace();}return null;}/** * 将JSON字符串转换为对象 * @param json JSON字符串 * @param typeReference 对象类型 */public static <T> T toObject(String json, TypeReference<?> typeReference) {Assert.notNull(json);Assert.notNull(typeReference);try {return mapper.readValue(json,typeReference);} catch (Exception e) {e.printStackTrace();}return null;}/** * 将JSON字符串转换为对象 * @param json JSON字符串 * @param javaType 对象类型 */public static <T> T toObject(String json, JavaType javaType) {Assert.notNull(json);Assert.notNull(javaType);try {return mapper.readValue(json, javaType);} catch (Exception e) {e.printStackTrace();}return null;}}
2、新建一个被转换的实体类Bean

package com.test;public class Bean {public String name;public String sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

3、Test类main主函数中,map包含3个键值对,而实体类bean中只有两个属性,利用gson把json字符串转bean对象时,如果能够转换成功,说明gson能超量转换;反之,不能。

4、输出结果:

{"sex":"male","age":"20","name":"hy"}hymale
5、结论:利用gson把json字符串转bean对象时,gson能超量转换。


二:研究的问题:当把json字符串利用Gson转换成对应变量的对象时,如果json字符串中包涵的key-value键值对少于对象中的属性时,会不会不能转换?

过程和以上类似,修改部分代码,注释掉map的两个键值对,使json字符串对应的值少于实体类:

package com.test;import java.util.HashMap;import java.util.Map;import com.google.gson.Gson;public class Test {public static <T> T jsonToObject(String json, Class<T> classOfT)throws Exception {Gson gson = new Gson();return gson.fromJson(json, classOfT);}public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("name", "hy");//map.put("age", "20");//map.put("sex", "male");String json = JsonUtil.toJson(map);System.out.println(json);try {Bean bean = jsonToObject(json, Bean.class);System.out.println(bean.getName());System.out.println(bean.getSex());} catch (Exception e) {e.printStackTrace();}}}
输出:

{"name":"hy"}hynull

结论:利用gson把json字符串转bean对象时,gson能少量转换。

0 0
原创粉丝点击