json字符串转换成对象

用两种方法实现:

1,使用gson

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.5</version>
  </dependency>

json字符串转换长对象:

对象转换成json:

案例:

Gson gson =new Gson();
         Dog dog=new Dog();
         dog.setAge("12");
         dog.setName("大黄");
         String jsonString=gson.toJson(dog);
         System.out.println(jsonString);
         Dog dog1=gson.fromJson(jsonString, Dog.class);
         System.out.println(dog1.getName());

2,使用jackson

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.6</version>
</dependency>

案例:

public class JsonUtil {

    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    /**
     * Json格式的字符串向JavaBean转换,传入空串将返回null
     * @param strBody Json格式的字符串
     * @param c 目标JavaBean类型
     * @return JavaBean对象
     * @throws JsonParseException
     * @throws JsonMappingException
     * @throws IOException
     */
    public static <T>T json2Object(String strBody,Class<T> c) throws JsonParseException, JsonMappingException, IOException{
        if(strBody==null || "".equals(strBody)){
            return null;
        }else{
            strBody = EscapeCompatible(strBody);
            ObjectMapper mp = new ObjectMapper();
            T t = (T)mp.readValue(strBody,c);
            return t;
        }
    }
    
    /**
     *
     * @param strBody
     * @param c
     * @return
     * @throws JsonParseException
     * @throws JsonMappingException
     * @throws IOException
     */
    public static Object json2ComplexObject(String strBody) throws JsonParseException, JsonMappingException, IOException{
        if(strBody==null || "".equals(strBody)){
            return null;
        }else{
            strBody = EscapeCompatible(strBody);
            ObjectMapper mp = new ObjectMapper();
            Object o = mp.readValue(strBody,Object.class);//每个属性的实际类型是string
            return o;
        }
    }

    /**
     * Json格式的字符串向JavaBean List集合转换,传入空串将返回null
     * @param <T>
     * @param <T>
     * @param <T>
     * @param strBody
     * @param c
     * @return
     * @return
     * @throws JsonParseException
     * @throws JsonMappingException
     * @throws IOException
     */
    public static <T> List<T> json2ObjectList(String strBody,Class<T> c) throws JsonParseException, JsonMappingException, IOException{
        if(strBody==null || "".equals(strBody)){
            return null;
        }else{
            strBody = EscapeCompatible(strBody);
            ObjectMapper mp = new ObjectMapper();
            JavaType javaType = mp.getTypeFactory().constructParametricType(ArrayList.class, c);
            List<T> lst =  (List<T>)mp.readValue(strBody, javaType);
            return lst;
        }
    }
    
    /**
     * Json格式的字符串向List<String>集合转换,传入空串将返回null
     * @param strBody
     * @return
     * @throws JsonParseException
     * @throws JsonMappingException
     * @throws IOException
     */
    public static List<String> json2List(String strBody) throws JsonParseException, JsonMappingException, IOException{
        if(strBody==null || "".equals(strBody)){
            return null;
        }else{
            strBody = EscapeCompatible(strBody);
            ObjectMapper mp = new ObjectMapper();
            List<String> t = (List<String>)mp.readValue(strBody, List.class);
            return t;
        }
    }
    
    
    /**
     * 转义兼容方法,若URL中的反斜杠是单杠,则增加一个反斜杠用以转义
     * @param strBody
     * @return
     */
    private static String EscapeCompatible(String strBody) {
        int s  = strBody.indexOf("\\");//第一个反斜杠的位置
        char a = strBody.charAt(s+1);//第一个反斜杠后边的那个字符
        /*
         * 如果解析后的url中的反斜杠是单杠,则转义
         */
        if(!String.valueOf(a).equals("\\")){
            strBody = strBody.replace("\\", "\\\\");
        }
        return strBody;
    }

    
    /**
     * Object转为Json格式字符串的方法
     * @param o
     * @return
     * @throws JsonProcessingException
     */
    public static String object2Json(Object o) throws JsonProcessingException{
        ObjectMapper mp = new ObjectMapper();
        return mp.writeValueAsString(o);
    }
    
    public static String encodeObject(Object o) {
        try {
            return OBJECT_MAPPER.writeValueAsString(o);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Json格式的字符串向JavaBean转换,传入空串将返回null
     * @param strBody Json格式的字符串
     * @param c 目标JavaBean类型
     * @return JavaBean对象, 如果解析失败返回 null
     */
    public static <T> T decodeJson(String strBody, Class<T> c) {
        if (strBody == null || "".equals(strBody)) {
            return null;
        }
        else {
            try {
                return OBJECT_MAPPER.readValue(strBody, c);
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
}

String jString=JsonUtil.object2Json(dog);
         System.out.println(jString);
         Dog dog2=JsonUtil.json2Object(jString, Dog.class);
         System.out.println(dog2.getAge());



猜你喜欢

转载自blog.csdn.net/u010446936/article/details/54946683