一、jsonparseobject泛型
public static <T> T parseObject(String json, Class<T> clazz)
json.parseobject()是阿里巴巴fastjson中的一个方法,其中最重要的参数是json字符串和要转换成的类类型Class<T>,使用这个方法可以将一个JSON字符串转换成指定的java对象
clazz是一个泛型,和json字符串的格式对应,即如果json字符串的格式对应一个java对象,那么就能通过反射构建一个对象,把json字符串中的值填充到这个对象属性中。如果json字符串不是一个标准的json格式,或者json字符串中的属性名在clazz对应的java对象中不存在,都会引起异常。
比如下面的代码,将json字符串转换成一个Person对象:
public class Person { private String name; private int age; private boolean male; // getter, setter } String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}"; Person person = JSON.parseObject(jsonStr, Person.class);
其中的json字符串是一个键值对的格式,对应clazz中Person类的成员变量,最终生成的person对象的属性值如下:
person.name = "Tom"; person.age = 25; person.male = true;
二、jsonparseobject转对象
public static JSONObject parseObject(String text)
JSON.parseObject()方法还可以将json字符串转换成JSONObject对象。
JSONObject是一个JavaBean,可以使用getter和setter方法获取和设置不同类型的数据,比如字符串、数字等等。与普通的Java对象不同的是,JSONObject的属性名和属性值不需要在定义时指定,而是在使用getter和setter方法时传入。一个JSONObject对象通常用于封装一个json字符串的某一部分数据。
下面是一个使用JSON.parseObject()方法将json字符串转换成JSONObject对象的例子:
String jsonStr = "{\"name\":\"Tom\",\"age\":25,\"male\":true}"; JSONObject jsonObj = JSON.parseObject(jsonStr); System.out.println(jsonObj.getString("name")); // "Tom" System.out.println(jsonObj.getIntValue("age")); // 25 System.out.println(jsonObj.getBooleanValue("male")); // true
三、jsonparseobject转对象报错
在使用json.parseobject()方法时,有可能会遇到转换异常的情况,这时候需要根据错误信息来分析原因。
一种常见的错误是:反射时找不到某一个属性,则调用返回null,而null无法转换成基本数据类型或者对象类型,导致异常。
下面是一个在使用json.parseobject()方法时出现异常的例子:
public class User { private String username; private int age; // getter, setter } String jsonStr = "{\"username\":\"Tom\"}"; User user = JSON.parseObject(jsonStr, User.class);
运行上述代码会抛出一个“java.lang.NumberFormatException: null”的异常,原因是json字符串中缺少age属性,且age为int类型,没有默认值。为了避免这种异常,可以给age属性设置默认值,如下:
public class User { private String username; private int age = 0; // 设置默认值 // getter, setter } String jsonStr = "{\"username\":\"Tom\"}"; User user = JSON.parseObject(jsonStr, User.class); System.out.println(user.getAge()); // 0
四、jsonparseobject转换map报错
json.parseobject()方法还可以将json字符串转换成Map对象。但是在转换过程中,如果属性名为null或者"",在java中这些属性将不能作为Map的key值。因此,可能会出现“java.lang.NullPointerException”异常。
为了避免这种异常,可以将属性名为null或者""的属性移除,或者从json字符串中删除这些属性。
下面是一个在使用json.parseobject()方法时出现异常的例子:
String jsonStr = "{\"name\":\"Tom\",\"\":23}"; Map<String, Object> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){});
运行上述代码会抛出一个“java.lang.NullPointerException”的异常,原因是json字符串中出现了空字符串""的属性名。为了避免这种异常,可以使用remove方法移除属性名为null或者""的属性:
String jsonStr = "{\"name\":\"Tom\",\"\":23}"; JSONObject jsonObj = JSON.parseObject(jsonStr); jsonObj.remove(""); Map<String, Object> map = JSONObject.toJavaObject(jsonObj, new TypeReference<Map<String, Object>>(){}); System.out.println(map.get("name")); // Tom System.out.println(map.get("")); // null
五、总结
json.parseobject()是一个非常有用的方法,可以将json字符串转换成Java对象、JSONObject对象或者Map对象。在使用时,需要注意json字符串的格式是否符合要求,需要根据不同的情况调整泛型类型或者修改json字符串。