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();
    }
}
时间: 2024-10-22 21:17:43

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

java中的JSON对象的使用

申明:没工作之前都没听过JSON,可能是自己太菜了.可能在前台AJAX接触到JSON,这几天要求在纯java的编程中,返回JSON字符串形式. 网上有两种解析JSON对象的jar包:JSON-lib.jar和json.jar,这里主要介绍JSON-lib.jar. jar包地址如下: json-lib-2.4-jdk15.jar所需全部JAR包.rar 一.JSON-lib.jar还依赖以下jar包: commons-lang.jar commons-beanutils.jar commons-

在java中构建json对象,返回给前端页面

// 给客户端返回一个json对象 StringBuilder sb = new StringBuilder("{"); sb.append("\"name\"").append(":").append(user.getName()); sb.append(","); sb.append("\"gender\"").append(":").appe

JAVA中使用JSON进行数据传递

在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据. 首先,在JAVA中使用JSON需要引入 org.json 包(点击 这里 可以下载相应的JAR包!), 并在程序中引入相应的JSON类: import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; 其

JAVA中的JSON

1.在服务器端的Servlet类中,可以使用如下方法收集数据并生成相应的JSON字符串 //声明一个Hash对象并添加数据Map params = new HashMap(); params.put("username", username);params.put("user_json", user); //声明JSONArray对象并输入JSON字符串JSONArray array = JSONArray.fromObject(params);put.printl

json字符串转换成json对象,json对象转换成字符串,值转换成字符串,字符串转成值

主要内容: 一.json相关概念 二.json字符串转换成json对象 (字符串-->JSON对象) 三.json对象转换成字符串(json对象-->字符串) 四.将值转换成字符串(值-->字符串) 五.字符串转成值(字符串-->值) 同步的交流学习社区:http://www.mwcxs.top/page/425.html 一.json相关概念 json,全称为javascript object notation,是一种轻量级的数据交互格式.采用完全独立于语言的文本格式,是一种理想

java中Comparable实现对象的比较

/* class A implements Comaprable<A>{ } 那么 A x = new A(); 类关系图 Object o = A; Object Comparable c = A; | Comparable A 实现了 Comparable 接口嘛 |-----|-----A 所以有 o instanceof A == true; o instanceof Comparable == true; 例如ArrayList添加对象实例时,对象实例添加之后先向上转型为Object

JAVA中,JSON MAP LIST的相互转换

1 JSON包含对象和数组,对应于JAVA中的JSONObject,JSONArray 2 String 转JSON对象 JSONObject.fromObject("String"); String 转JSON数组 JSONArray.fromObject("String"); 3 List 和 JSON互转 JSONObject.toBean() JSONArray.fromObject(List) JAVA中,JSON MAP LIST的相互转换,布布扣,bu

在js中 把 json对象转化为String对象的方法

方法1: 使用js的扩展方法 ** * json对象转字符串形式 */ function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return json2str(s); return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; } for (v

Java中利用MessageFormat对象实现类似C# string.Format方法格式化

我们在写C#代码的时候常常会使用到string.Format("待格式化字符串{0},{1},....",参数1,参数2,...),来格式化字符串,特别是拼接字符的时候,这种方式使得代码更为直观清楚. 最近使用java时候却java的string.Format与c#重点string.Format用法不一样,java中的string.format更类似于C语言的sprintf()方法 例如: String str=null; str=String.format("Hello,%