Json字符串与java对象互转

 
到Json的官网上http://json-lib.sourceforge.net/,下载jar包。在官网也可以看到,使用Json还需要其他的一些jar包,官网上是这样列的:
 
jakarta commons-lang 2.5
 
jakarta commons-beanutils 1.8.0
 
jakarta commons-collections 3.2.1
 
jakarta commons-logging 1.1.1
 
ezmorph 1.0.6
 
当然,我们也可以使用相对新一些版本的jar包,不过需要注意的是,commons-lang这个jar需要选择2.6版本以下的(当然包括2.6了),因为版本到3.3.0.1以后,jar包中的包名都发生了变化,再使用的话,会报错i,当然我也没有深究到底是哪个jar包引起的(有知道的不妨留言给小弟我,在此感谢)。 
 
Json转java对象经常会用到两个类net.sf.json.JSONObject和net.sf.json.JSONArray,通过类名就可以看出来,前者是是针对无序集合而言,后者是针对有序集合如List等而言。
 
简单介绍以下方法,JSONObject JSONObject.fromObject( Object object )这个方法把java对象做为参数,返回一个JSONObject对象,这个对象就是符合json格式的字符串;
 
JSONArray JSONArray.fromObject( Object object )接收一个集合。
 
先定义一个实体类:
 package com.bao.json.demo;

import java.util.ArrayList;
package com.bao.json.domain;

public class User {

	private int id;
	private String name;
	private boolean gender;
	private float price;

	public User() {
		super();
	}

	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	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 boolean isGender() {
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

} 
以下是工具类:
 package com.bao.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @Description:Json工具类
 * 有序集合以'['开始,以']'结束;其他以'{'开始,以'}'结束.
 * java对象转字符串可以使用JSONArray或JSONObject.
 * @author:bao
 * @date:Dec 24, 2011
 * @see JSONArray
 */
public class JsonUtil {

	/**
	 * @Description:POJO转Json字符串
	 * @param obj
	 * @return String
	 */
	public static String bean2JsonStr(Object obj) {
		JSONObject jsonObj = JSONObject.fromObject(obj);

		return JsonUtil.toString(jsonObj);
	}

	/**
	 * @Description:Json字符串转POJO对象
	 * @param jsonStr
	 * @param pojo
	 * @return Object
	 */
	public static Object jsonStr2Bean(String jsonStr, Class<?> clazz) {
		Object obj;

		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		obj = JSONObject.toBean(jsonObject, clazz);

		return obj;
	}

	/**
	 * @Description:Json字符串转Map<String, Object>
	 * @param jsonStr
	 * @return Map<String,Object>
	 */
	public static Map<String, Object> jsonStr2Map(String jsonStr) {

		Map<String, Object> result = new HashMap<String, Object>();

		JSONObject jsonObj = JSONObject.fromObject(jsonStr);
		Iterator<?> keys = jsonObj.keys();
		String key;
		Object val;

		while (keys.hasNext()) {
			key = (String) keys.next();
			val = jsonObj.get(key);
			result.put(key, val);
		}

		return result;
	}

	/**
	 * @Description:Json字符串转List,内部对象为Object,需要手动转换为制定的对象类型
	 * @param jsonStr
	 * @param pojo
	 * @return List
	 */
	public static List jsonStr2List(String jsonStr, Class clazz) {
		List result = new ArrayList();

		JSONArray jsonArray = JSONArray.fromObject(jsonStr);
		JSONObject jsonObj;
		Object pojoVal;

		for (int i = 0; i < jsonArray.size(); i++) {
			jsonObj = jsonArray.getJSONObject(i);
			pojoVal = JSONObject.toBean(jsonObj, clazz);
			result.add(pojoVal);
		}

		return result;
	}

	public static Object[] jsonStr2ObjectArray(String jsonStr) {

		JSONArray jsonArray = JSONArray.fromObject(jsonStr);
		Object[] result = new Object[jsonArray.size()];
		for (int i = 0; i < jsonArray.size(); i++) {
			result[i] = jsonArray.get(i);

		}
		return result;
	}

	/**
	 * @Description:将Object转化为String
	 * @param obj 指定对象,默认值为""
	 * @return String
	 */
	public static String toString(Object obj) {
		return toString(obj, "");
	}

	/**
	 * @Description:将Object转化为String
	 * @param obj 指定对象
	 * @param defaultStr 为空的默认字符串
	 * @return String
	 */
	public static String toString(Object obj, String defaultStr) {
		String result = defaultStr;
		if (obj != null) {
			result = obj.toString();
		}
		return result;
	}

}
 
以下是通过junit4.7测试过的:
 package com.bao.common.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.junit.Test;

import com.bao.json.domain.User;

public class JsonUtilTest {

	@Test
	public void testBeanO2JsonStr() {
		String result = JsonUtil.bean2JsonStr(getUser());
		System.out.println(result);
	}

	@Test
	public void testJsonStr2Bean() {
		Object obj = JsonUtil.jsonStr2Bean(JsonUtil.bean2JsonStr(getUser()),
				User.class);
		System.out.println(obj);
	}
	
	@Test
	public void testJsonStr2List(){
		
		List list = JsonUtil.jsonStr2List(getFromList().toString(), User.class);
		System.out.println(list);
	}
	
	@Test
	public void testJsonStr2Map(){
		Map<?, ?> map = JsonUtil.jsonStr2Map(getFromMap().toString());
		System.out.println(map);
	}
	
	@Test
	public void testJsonStr2ObjectArray(){
		Integer[] result = {1,2,3};
		Object[] objs  = JsonUtil.jsonStr2ObjectArray(JSONArray.fromObject(result).toString());
		
		for(int i=0;i<objs.length;i++){
			System.out.println(objs[i]);
		}
	}
	

	private static User getUser() {
		User user = new User();

		user.setId(11);
		user.setName("test");
		user.setGender(true);
		user.setPrice(2.7f);
		return user;
	}

	private static List<User> getList() {
		User user = getUser();

		List<User> users = new ArrayList<User>();

		for (int i = 0; i < 10; i++) {
			users.add(user);
		}
		return users;
	}

	private static JSONArray getFromList() {

		List<User> users = getList();

		return JSONArray.fromObject(users);
	}
	
	public static JSONObject getFromMap() {

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ua", getUser());
		map.put("list", getList());
		
		return JSONObject.fromObject(map);
	}

}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值