Java中关于Json对象类型和字符串类型之间互相转化的问题

jopen 9年前

Java中关于Json对象类型和字符串类型之间互相转化的问题
   Java中关于Json格式转化Object,Map,Collection类型和String类型之间的转化在我们实际项目中应用的很是普遍和广泛。最近工作的过程中也是经常有,因此,自己封装了一个JsonUtil.java类

     所需要的jar包:slf4j-jdk14-1.5.6.jar,slf4j-api-1.5.6.jar------>此两个jar包是slf4j日志jar包

                                             jackson-annotations-2.1.1.jar,jackson-core-2.1.1.jar,jackson-databind-2.1.1.jar---->实现Json转化的依赖包

    package com.clark.util;                import java.io.IOException;        import java.io.StringWriter;        import java.util.ArrayList;        import java.util.Collection;        import java.util.Date;        import java.util.HashMap;        import java.util.Iterator;        import java.util.List;        import java.util.Map;        import java.util.Set;                import org.slf4j.Logger;        import org.slf4j.LoggerFactory;                import com.fasterxml.jackson.core.JsonFactory;        import com.fasterxml.jackson.core.JsonGenerationException;        import com.fasterxml.jackson.core.JsonGenerator;        import com.fasterxml.jackson.core.JsonParseException;        import com.fasterxml.jackson.databind.JsonMappingException;        import com.fasterxml.jackson.databind.ObjectMapper;        import com.fasterxml.jackson.databind.ser.FilterProvider;        import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;        import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;        import com.clark.model.User;                /*        *         * @author caolipeng        * @title JsonUtil.java        * @description 提供用于Json数据转换的静态方法        * @version V1.0        */        public class JsonUtil {                    private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);                    /**            * 性能方面 JackSon > Gson > Json 故这里决定使用JackSon 将Collection转换为Json            * 参数是Collection            *             * @param collection            */            public static String toJson(Collection<Object> collection) {                /*                * 使用Gson的方式 Gson gson = new Gson(); String json = gson.toJson(map);                */                        /*                * 使用Jackson的方式                */                String json = "[]";                ObjectMapper mapper = new ObjectMapper();                StringWriter sw = new StringWriter();                try {                    JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);                    mapper.writeValue(gen, collection);                    gen.close();                    json = sw.toString();                } catch (JsonGenerationException e) {                    json = "[]";                    logger.error(                            "------1------ toJson JsonGenerationException error:\n", e);                        } catch (JsonMappingException e) {                    json = "[]";                    logger.error("------2------ toJson JsonMappingException error:\n",                            e);                        } catch (IOException e) {                    json = "[]";                    logger.error("------3------ toJson IOException error:\n", e);                }                        return json;            }                    /**            * @Title: toJson            * @Description: 将对象转换为Json数据            * @param @param obj            * @param @return 设定文件            * @return String 返回类型            * @throws            */            public static String toJson(Object obj) {                String json = "[]";                ObjectMapper mapper = new ObjectMapper();                StringWriter sw = new StringWriter();                try {                    JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);                    mapper.writeValue(gen, obj);                    gen.close();                                        json = sw.toString();                } catch (JsonGenerationException e) {                    json = "[]";                    logger.error("------1------ toJson IOException error:\n", e);                        } catch (JsonMappingException e) {                    json = "[]";                    logger.error("------2------ toJson IOException error:\n", e);                        } catch (IOException e) {                    json = "[]";                    logger.error("------3------ toJson IOException error:\n", e);                }                        return json;            }                            /**            * 将MAP转为Json Map参数            *             * @param map            * @return            * @throws IOException            */            public static String toJson(Map<String, Object> map) {                String json = "[]";                ObjectMapper mapper = new ObjectMapper();                StringWriter sw = new StringWriter();                try {                    JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);                    mapper.writeValue(gen, map);                    gen.close();                                        json = sw.toString();                } catch (JsonGenerationException e) {                    json = "[]";                    logger.error("----1------toJson JsonGenerationException:\n" + e);                } catch (JsonMappingException e) {                    json = "[]";                    logger.error("----2------toJson JsonMappingException:\n" + e);                } catch (IOException e) {                    json = "[]";                    logger.error("----3------toJson IOException:\n" + e);                }                        return json;            }                    /**            * 将JSON字符串 转换为对象            *             * @author weiyuanhua            * @date 2010-11-18 下午02:52:13            * @param jsonStr            *            JSON字符串            * @param beanClass            *            泛型对象            * @param field            *            对象中需要忽略的属性            * @return            */            public static Object jsonToObject(String jsonStr, Class<?> beanClass)                    throws JsonParseException, JsonMappingException, IOException {                ObjectMapper objectMapper = new ObjectMapper();                return objectMapper.readValue(jsonStr.getBytes(), beanClass);            }                    public static Object jsonToObject(String jsonStr, String encoding,                    Class<?> beanClass) throws JsonParseException,                    JsonMappingException, IOException {                ObjectMapper objectMapper = new ObjectMapper();                return objectMapper.readValue(jsonStr.getBytes(encoding), beanClass);            }                    public static Map<String, Object> parseJSON2Map(String jsonStr)                    throws JsonParseException, JsonMappingException, IOException {                ObjectMapper objectMapper = new ObjectMapper();                return objectMapper.readValue(jsonStr, Map.class);            }                        //不需要记性属性的忽略              public static String toJson(Object object,String filterName) {                ObjectMapper mapper = new ObjectMapper();                String  json = "[]";                  try {                      FilterProvider filterProvider = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept());                      json = mapper.writer(filterProvider).writeValueAsString(object);                  } catch (Exception e) {                      json = "[]";                      logger.error("----1------toJson Exception:\n" + e);                }                                return json;            }                        /*             *             * @param object 需要进行json序列化的类  可以是任何复杂的类             * @param args 需要进行过滤的属性名称 类对象名称或者一些属性名称都可以进行过滤             * */              public static String toJson(Object object, String[] args, String filterName) {                String json = "[]";                ObjectMapper mapper = new ObjectMapper();                try {                    FilterProvider filterProvider = new SimpleFilterProvider()                            .addFilter(filterName,                                    SimpleBeanPropertyFilter.serializeAllExcept(args));                    json = mapper.writer(filterProvider).writeValueAsString(object);                } catch (Exception e) {                    json = "[]";                    logger.error("----1------toJson Exception:\n" + e);                }                        return json;            }                        public static void main(String[] args) {                User user = new User(12, "aaa", "123456", new Date());        //      String result = toJson(user, "id");                String result = toJson(user);                System.out.println(result);                List list = new ArrayList();                list.add(0,"name");                list.add(1,"favorite");                String li = toJson(list);                System.out.println(li);                                Map<String,String> map = new HashMap<String,String>();                map.put("password", "123");                map.put("name", "clark");                map.put("call", "wowo");                String mr = toJson(map);                System.out.println(mr);                                Date d = new Date();                String jsonStr = "{\"id\":23,\"name\":\"44444\"}";                try {                    User u = (User)jsonToObject(jsonStr, User.class);                    System.out.println(u.getName());                                                            Map<String, Object> mapResult = parseJSON2Map(jsonStr);                    Set<String> key = mapResult.keySet();                    Iterator iter = key.iterator();                    while(iter.hasNext()){                        String k = (String) iter.next();                        System.out.println(mapResult.get(k));                    }                                    } catch (JsonParseException e) {                    e.printStackTrace();                } catch (JsonMappingException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                }            }        }  
在应用测试中的Model类---User.java类如下:
    package com.clark.model;                import java.util.Date;                public class User {            private int id;            private String name;            private String password;            private Date date;            public int getId() {                return id;            }            public void setId(int id) {                this.id = id;            }            public String getName() {                return name;            }            public void setName(String name) {                this.name = name;            }            public String getPassword() {                return password;            }            public void setPassword(String password) {                this.password = password;            }            public Date getDate() {                return date;            }            public void setDate(Date date) {                this.date = date;            }            public User(int id, String name, String password, Date date) {                super();                this.id = id;                this.name = name;                this.password = password;                this.date = date;            }                        public User(){                            }                        @Override            public String toString() {                return "Id:"+this.getId()+"\n"+"name:"+this.getName()+"\n"+"password:"+this.getPassword();            }        }