1. 程式人生 > >Jackson之String與物件互轉

Jackson之String與物件互轉

public class JacksonTest {

    //配置ObjectMapper物件
    private static final ObjectMapper objectMapper = new ObjectMapper()
            .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

    /**
     * 使用泛型方法,把json字串轉換為相應的JavaBean物件。
     *      轉換為普通JavaBean:readValue(json,Student.class)
     *      轉換為List:readValue(json,List.class).readValue(json,List.class)返回其實是List<Map>型別,第二個引數不能是List<Student>.class,所以不能直接轉換。
     *      轉換為特定型別的List,比如List<Student>,把readValue()的第二個引數傳遞為Student[].class.然後使用Arrays.asList();方法把得到的陣列轉換為特定型別的List。
     *      轉換為Map:readValue(json,Map.class)
     *      我們使用泛型,得到的也是泛型
     *
     * @param content   要轉換的JavaBean型別
     * @param valueType  原始json字串資料
     * @return           JavaBean物件
     */
    public static <T> T readValue(String content, Class<T> valueType) {
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }
        try {
                   //字串轉Json物件
            return objectMapper.readValue(content, valueType);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 把JavaBean轉換為json字串
     *      普通物件轉換:toJson(Student)
     *      List轉換:    toJson(List)
     *      Map轉換:      toJson(Map)
     * 我們發現不管什麼型別,都可以直接傳入這個方法
     *
     * @param object  JavaBean物件
     * @return        json字串
     */
    public static String toJSon(Object object) {
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
        }
        try {
                   //Json物件轉為String字串
            return objectMapper.writeValueAsString(object);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

}

 

注意:①@JsonIgnoreProperties(ignoreUnknown=true)作用:忽略沒有傳入的屬性,否則每一個setter方法都必須在字串中找到對照,找不到就會報錯。