Java中关于Json对象类型和字符串类型之间互相转化的问题
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(); } }