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转化的依赖包
  1. package com.clark.util;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.StringWriter;  
  5. import java.util.ArrayList;  
  6. import java.util.Collection;  
  7. import java.util.Date;  
  8. import java.util.HashMap;  
  9. import java.util.Iterator;  
  10. import java.util.List;  
  11. import java.util.Map;  
  12. import java.util.Set;  
  13.   
  14. import org.slf4j.Logger;  
  15. import org.slf4j.LoggerFactory;  
  16.   
  17. import com.fasterxml.jackson.core.JsonFactory;  
  18. import com.fasterxml.jackson.core.JsonGenerationException;  
  19. import com.fasterxml.jackson.core.JsonGenerator;  
  20. import com.fasterxml.jackson.core.JsonParseException;  
  21. import com.fasterxml.jackson.databind.JsonMappingException;  
  22. import com.fasterxml.jackson.databind.ObjectMapper;  
  23. import com.fasterxml.jackson.databind.ser.FilterProvider;  
  24. import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;  
  25. import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;  
  26. import com.clark.model.User;  
  27.   
  28. /* 
  29.  *  
  30.  * @author caolipeng 
  31.  * @title JsonUtil.java 
  32.  * @description 提供用于Json数据转换的静态方法 
  33.  * @version V1.0 
  34.  */  
  35. public class JsonUtil {  
  36.   
  37.     private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);  
  38.   
  39.     /** 
  40.      * 性能方面 JackSon > Gson > Json 故这里决定使用JackSon 将Collection转换为Json 
  41.      * 参数是Collection 
  42.      *  
  43.      * @param collection 
  44.      */  
  45.     public static String toJson(Collection<Object> collection) {  
  46.         /* 
  47.          * 使用Gson的方式 Gson gson = new Gson(); String json = gson.toJson(map); 
  48.          */  
  49.   
  50.         /* 
  51.          * 使用Jackson的方式 
  52.          */  
  53.         String json = "[]";  
  54.         ObjectMapper mapper = new ObjectMapper();  
  55.         StringWriter sw = new StringWriter();  
  56.         try {  
  57.             JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  
  58.             mapper.writeValue(gen, collection);  
  59.             gen.close();  
  60.             json = sw.toString();  
  61.         } catch (JsonGenerationException e) {  
  62.             json = "[]";  
  63.             logger.error(  
  64.                     "------1------ toJson JsonGenerationException error:\n", e);  
  65.   
  66.         } catch (JsonMappingException e) {  
  67.             json = "[]";  
  68.             logger.error("------2------ toJson JsonMappingException error:\n",  
  69.                     e);  
  70.   
  71.         } catch (IOException e) {  
  72.             json = "[]";  
  73.             logger.error("------3------ toJson IOException error:\n", e);  
  74.         }  
  75.   
  76.         return json;  
  77.     }  
  78.   
  79.     /** 
  80.      * @Title: toJson 
  81.      * @Description: 将对象转换为Json数据 
  82.      * @param @param obj 
  83.      * @param @return 设定文件 
  84.      * @return String 返回类型 
  85.      * @throws 
  86.      */  
  87.     public static String toJson(Object obj) {  
  88.         String json = "[]";  
  89.         ObjectMapper mapper = new ObjectMapper();  
  90.         StringWriter sw = new StringWriter();  
  91.         try {  
  92.             JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  
  93.             mapper.writeValue(gen, obj);  
  94.             gen.close();  
  95.               
  96.             json = sw.toString();  
  97.         } catch (JsonGenerationException e) {  
  98.             json = "[]";  
  99.             logger.error("------1------ toJson IOException error:\n", e);  
  100.   
  101.         } catch (JsonMappingException e) {  
  102.             json = "[]";  
  103.             logger.error("------2------ toJson IOException error:\n", e);  
  104.   
  105.         } catch (IOException e) {  
  106.             json = "[]";  
  107.             logger.error("------3------ toJson IOException error:\n", e);  
  108.         }  
  109.   
  110.         return json;  
  111.     }  
  112.   
  113.   
  114.     /** 
  115.      * 将MAP转为Json Map参数 
  116.      *  
  117.      * @param map 
  118.      * @return 
  119.      * @throws IOException 
  120.      */  
  121.     public static String toJson(Map<String, Object> map) {  
  122.         String json = "[]";  
  123.         ObjectMapper mapper = new ObjectMapper();  
  124.         StringWriter sw = new StringWriter();  
  125.         try {  
  126.             JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  
  127.             mapper.writeValue(gen, map);  
  128.             gen.close();  
  129.               
  130.             json = sw.toString();  
  131.         } catch (JsonGenerationException e) {  
  132.             json = "[]";  
  133.             logger.error("----1------toJson JsonGenerationException:\n" + e);  
  134.         } catch (JsonMappingException e) {  
  135.             json = "[]";  
  136.             logger.error("----2------toJson JsonMappingException:\n" + e);  
  137.         } catch (IOException e) {  
  138.             json = "[]";  
  139.             logger.error("----3------toJson IOException:\n" + e);  
  140.         }  
  141.   
  142.         return json;  
  143.     }  
  144.   
  145.     /** 
  146.      * 将JSON字符串 转换为对象 
  147.      *  
  148.      * @author weiyuanhua 
  149.      * @date 2010-11-18 下午02:52:13 
  150.      * @param jsonStr 
  151.      *            JSON字符串 
  152.      * @param beanClass 
  153.      *            泛型对象 
  154.      * @param field 
  155.      *            对象中需要忽略的属性 
  156.      * @return 
  157.      */  
  158.     public static Object jsonToObject(String jsonStr, Class<?> beanClass)  
  159.             throws JsonParseException, JsonMappingException, IOException {  
  160.         ObjectMapper objectMapper = new ObjectMapper();  
  161.         return objectMapper.readValue(jsonStr.getBytes(), beanClass);  
  162.     }  
  163.   
  164.     public static Object jsonToObject(String jsonStr, String encoding,  
  165.             Class<?> beanClass) throws JsonParseException,  
  166.             JsonMappingException, IOException {  
  167.         ObjectMapper objectMapper = new ObjectMapper();  
  168.         return objectMapper.readValue(jsonStr.getBytes(encoding), beanClass);  
  169.     }  
  170.   
  171.     public static Map<String, Object> parseJSON2Map(String jsonStr)  
  172.             throws JsonParseException, JsonMappingException, IOException {  
  173.         ObjectMapper objectMapper = new ObjectMapper();  
  174.         return objectMapper.readValue(jsonStr, Map.class);  
  175.     }  
  176.       
  177.     //不需要记性属性的忽略     
  178.     public static String toJson(Object object,String filterName) {  
  179.         ObjectMapper mapper = new ObjectMapper();  
  180.         String  json = "[]";    
  181.         try {    
  182.             FilterProvider filterProvider = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept());    
  183.             json = mapper.writer(filterProvider).writeValueAsString(object);    
  184.         } catch (Exception e) {    
  185.             json = "[]";    
  186.             logger.error("----1------toJson Exception:\n" + e);  
  187.         }  
  188.           
  189.         return json;  
  190.     }  
  191.       
  192.     /*  
  193.      *  
  194.      * @param object 需要进行json序列化的类  可以是任何复杂的类  
  195.      * @param args 需要进行过滤的属性名称 类对象名称或者一些属性名称都可以进行过滤  
  196.      * */    
  197.     public static String toJson(Object object, String[] args, String filterName) {  
  198.         String json = "[]";  
  199.         ObjectMapper mapper = new ObjectMapper();  
  200.         try {  
  201.             FilterProvider filterProvider = new SimpleFilterProvider()  
  202.                     .addFilter(filterName,  
  203.                             SimpleBeanPropertyFilter.serializeAllExcept(args));  
  204.             json = mapper.writer(filterProvider).writeValueAsString(object);  
  205.         } catch (Exception e) {  
  206.             json = "[]";  
  207.             logger.error("----1------toJson Exception:\n" + e);  
  208.         }  
  209.   
  210.         return json;  
  211.     }  
  212.       
  213.     public static void main(String[] args) {  
  214.         User user = new User(12"aaa""123456"new Date());  
  215. //      String result = toJson(user, "id");   
  216.         String result = toJson(user);  
  217.         System.out.println(result);  
  218.         List list = new ArrayList();  
  219.         list.add(0,"name");  
  220.         list.add(1,"favorite");  
  221.         String li = toJson(list);  
  222.         System.out.println(li);  
  223.           
  224.         Map<String,String> map = new HashMap<String,String>();  
  225.         map.put("password""123");  
  226.         map.put("name""clark");  
  227.         map.put("call""wowo");  
  228.         String mr = toJson(map);  
  229.         System.out.println(mr);  
  230.           
  231.         Date d = new Date();  
  232.         String jsonStr = "{\"id\":23,\"name\":\"44444\"}";  
  233.         try {  
  234.             User u = (User)jsonToObject(jsonStr, User.class);  
  235.             System.out.println(u.getName());  
  236.               
  237.               
  238.             Map<String, Object> mapResult = parseJSON2Map(jsonStr);  
  239.             Set<String> key = mapResult.keySet();  
  240.             Iterator iter = key.iterator();  
  241.             while(iter.hasNext()){  
  242.                 String k = (String) iter.next();  
  243.                 System.out.println(mapResult.get(k));  
  244.             }  
  245.               
  246.         } catch (JsonParseException e) {  
  247.             e.printStackTrace();  
  248.         } catch (JsonMappingException e) {  
  249.             e.printStackTrace();  
  250.         } catch (IOException e) {  
  251.             e.printStackTrace();  
  252.         }  
  253.     }  
  254. }  
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类如下:
  1. package com.clark.model;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class User {  
  6.     private int id;  
  7.     private String name;  
  8.     private String password;  
  9.     private Date date;  
  10.     public int getId() {  
  11.         return id;  
  12.     }  
  13.     public void setId(int id) {  
  14.         this.id = id;  
  15.     }  
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22.     public String getPassword() {  
  23.         return password;  
  24.     }  
  25.     public void setPassword(String password) {  
  26.         this.password = password;  
  27.     }  
  28.     public Date getDate() {  
  29.         return date;  
  30.     }  
  31.     public void setDate(Date date) {  
  32.         this.date = date;  
  33.     }  
  34.     public User(int id, String name, String password, Date date) {  
  35.         super();  
  36.         this.id = id;  
  37.         this.name = name;  
  38.         this.password = password;  
  39.         this.date = date;  
  40.     }  
  41.       
  42.     public User(){  
  43.           
  44.     }  
  45.       
  46.     @Override  
  47.     public String toString() {  
  48.         return "Id:"+this.getId()+"\n"+"name:"+this.getName()+"\n"+"password:"+this.getPassword();  
  49.     }  
  50. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值