FastJson实现序列化

FastJson源码

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text)// 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

JSONArray : 相当于List
JSONObject: 相当于Map

FastJson测试

User类:

public class User {
	private String username;
	private String password;
	public User(){}
	public User(String username,String password){
		this.username = username;
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
    @Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
}

Users类:

import java.util.ArrayList;
import java.util.List;

public class Users{
	private String name;  
    private List<User> users = new ArrayList<User>();
    public Users(){}
    public Users(String name,List<User> users){
    	this.name = name;
    	this.users = users;
    }
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<User> getUsers() {
		return users;
	}
	public void setUsers(List<User> users) {
		this.users = users;
	}
	@Override
	public String toString() {
		return "Users [name=" + name + ", users=" + users + "]";
	}  
}

测试类:

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
public class TestFastJosn {
	/**
	 * java对象转 json字符串 
	 */
	@Test
	public void objectTOJson(){
		//简单java类转json字符串
		User user = new User("test", "123456");
		String UserJson = JSON.toJSONString(user);
		System.out.println("简单java类转json字符串:"+UserJson);
		
		//List转json字符串
		User user1 = new User("zhangsan", "123123");
		User user2 = new User("lisi", "321321");
		List<User> users = new ArrayList<User>();
		users.add(user1);
		users.add(user2);
		String ListUserJson = JSON.toJSONString(users);
		System.out.println("List转json字符串:"+ListUserJson);	
		
		//复杂java类转json字符串
		Users users = new Users("users", users);
		String usersJson = JSON.toJSONString(users);
		System.out.println("复杂java类转json字符串:"+usersJson);		
	}
	
	/**
	 * json字符串转java对象
	 * 注:字符串中使用双引号需要转义 (" --> \"),这里使用的是单引号
	 */
	@Test
	public void JsonTOObject(){
		/* json字符串转简单java对象
	     * 字符串:{"password":"123456","username":"test"}*/
		String jsonStr1 = "{'password':'123456','username':'test'}";
		User user = JSON.parseObject(jsonStr1, User.class);
		System.out.println("json字符串转简单java对象:"+user.toString());
		
		/*
		 * json字符串转List对象
		 * 字符串:[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]
		 */
		String jsonStr2 = "[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]";
		List<User> users = JSON.parseArray(jsonStr2, User.class);
		System.out.println("json字符串转List对象:"+users.toString());
			
		/*json字符串转复杂java对象
		 * 字符串:{"name":"users","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]}
		 * */
		String jsonStr3 = "{'name':'users','users':[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]}";
		Users users = JSON.parseObject(jsonStr3, Users.class);
		System.out.println("json字符串转复杂java对象:"+users);	
	}
}

输出结果:

简单java类转json字符串:{"password":"123456","username":"test"}
List<Object>转json字符串:[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]
复杂java类转json字符串:{"name":"users","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]}

json字符串转简单java对象:User [username=test, password=123456]
json字符串转List<Object>对象:[User [username=zhangsan, password=123123], User [username=lisi, password=321321]]
json字符串转复杂java对象:UserGroup [name=users, users=[User [username=zhangsan, password=123123], User [username=lisi, password=321321]]]

FastJson实例:

环境:SpringBoot+Redis+SpringCache
FastJson实现序列化_第1张图片
创建序列化对象:

package com.partner.framework.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import com.alibaba.fastjson.parser.ParserConfig;
import org.springframework.util.Assert;
import java.nio.charset.Charset;

/**
 * Redis使用FastJson序列化
 * 
 * @author primeton
 */
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
    @SuppressWarnings("unused")
    private ObjectMapper objectMapper = new ObjectMapper();

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

    private Class<T> clazz;

    static
    {
        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
    }

    public FastJson2JsonRedisSerializer(Class<T> clazz)
    {
        super();
        this.clazz = clazz;
    }

    public byte[] serialize(T t) throws SerializationException
    {
        if (t == null)
        {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    public T deserialize(byte[] bytes) throws SerializationException
    {
        if (bytes == null || bytes.length <= 0)
        {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);

        return JSON.parseObject(str, clazz);
    }

    public void setObjectMapper(ObjectMapper objectMapper)
    {
        Assert.notNull(objectMapper, "'objectMapper' must not be null");
        this.objectMapper = objectMapper;
    }

    protected JavaType getJavaType(Class<?> clazz)
    {
        return TypeFactory.defaultInstance().constructType(clazz);
    }
}

此时redis需要的序列化工具已经构建成功,可以直接使用。
关于构建静态设置 ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
请参照博文:Redis使用FastJson序列化/FastJson2JsonRedisSerializer

你可能感兴趣的:(FastJson,序列化,java)