fastjson使用介绍

本文主要总结了fastjson常用的几种转换方式,主要为Map与JSON、Class与JSON和List< Class>与JSON的相互转换。

解决fastjson循环引用问题和重复引用

JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();

public static void main(String[] args) {
		// JSON.DEFAULT_GENERATE_FEATURE |=
		// SerializerFeature.DisableCircularReferenceDetect.getMask();

		List<String> innerList = new ArrayList<>();
		innerList.add("121102,大额支取,1,other,001,0,0,0,0,03,,,0,0,trade/dezq.html");
		List<Object> outterList = new ArrayList<>();
		outterList.add(innerList);
		Map<String, Object> map = new HashMap<>();
		map.put("trade/dezq.html", outterList);
		map.put("121102", outterList);

		// String value = JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect);// 关闭循环引用
		String value = JSON.toJSONString(map);
		System.err.println(value);
	}

结果:

{“trade/dezq.html”:[[“121102,大额支取,1,other,001,0,0,0,0,03,0,0,trade/dezq.html”]],“121102”:[{" r e f &quot; : &quot; ref&quot;:&quot; ref":".trade\/dezq\.html[0]"}]}

关闭循环引用后结果为:

{“trade/dezq.html”:[[“121102,大额支取,1,other,001,0,0,0,0,03,0,0,trade/dezq.html”]],“121102”:[[“121102,大额支取,1,other,001,0,0,0,0,03,0,0,trade/dezq.html”]]}

JSON2Map

JSON与Map、JSON与List、JSON与String[]等之间的转换大体相同,本文以JSON2Map为例,代码如下:

public static void json2Map()
{
	// Map -> JSON
	Map<String, String> map = new HashMap<String, String>();
	map.put("a", "A");
	map.put("b", "B");
	map.put("c", "C");
	String json = JSON.toJSONString(map, true);
	System.out.println(json);
	// JSON -> Map
	Map<String, String> map1 = (Map<String, String>) JSON.parse(json);
	System.out.println(map1);
	for (String key : map1.keySet())
	{
		System.out.println(key + ":" + map1.get(key));
	}
}

运行结果如下:

{
“a”:“A”,
“b”:“B”,
“c”:“C”
}
{“a”:“A”,“b”:“B”,“c”:“C”}
b:B
c:C
a:A

其中,JSON.toJSONString(map,true)中的true为可选参数,第二个参数的含义为文本是否带格式化,当为JSON.toJSONString(map)时,输出结果为:

{“a”:“A”,“b”:“B”,“c”:“C”}
{“a”:“A”,“b”:“B”,“c”:“C”}
b:B
c:C
a:A

可以看到,是否带格式化的输出结果是有些许差异。

JSON2Class

代码如下:

public static void json2Object()
{
	// Class -> JSON
	Person person = new Person("Jack", "man", 20);
	String json = JSON.toJSONString(person);
	System.out.println(json);
	
	// JSON -> Class
	Person p = JSON.parseObject(json, Person.class);
	System.out.println(p);
}

其中的Person.java为:

public class Person
{
	String name;
	String sex;
	int age;
	
	// 这个构造函数必须存在,否则会报异常,com.alibaba.fastjson.JSONException: default constructor not found.
	public Person()
	{
	
	}
	
	public Person(String name)
	{
		this.name = name;
	}
	
	public Person(String name,String sex, int age)
	{
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	
	public String getName()
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public String getSex()
	{
		return sex;
	}
	public void setSex(String sex)
	{
		this.sex = sex;
	}
	public int getAge()
	{
		return age;
	}
	public void setAge(int age)
	{
		this.age = age;
	}

	@Override
	public String toString()
	{
		return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
	}
}

输出结果为:

{“age”:20,“name”:“Jack”,“sex”:“man”}
Person [name=Jack, sex=man, age=20]

在json转Class中需要注意:

Person中的默认空参的构造函数不能省略,即public Person(){ }必须有,否则会报异常:
com.alibaba.fastjson.JSONException: default constructor not found.

JSON2List

代码如下:

public static void json2List()
{
	// List<Class> -> JSON
	Person person = new Person("Jack", "man", 20);
	Person person2 = new Person("Marry", "woman", 18);
	List<Person> list = new ArrayList<Person>();
	list.add(person);
	list.add(person2);
	String json = JSON.toJSONString(list);
	System.out.println(json);

	// JSON -> List<Class>
	List<Person> re = JSON.parseArray(json, Person.class);
	System.out.println(re);
	for (int i = 0; i < re.size(); i++)
	{
		Person p = re.get(i);
		System.out.println(p.getName() + " is a " + p.getAge() + " years old " + p.getSex());
	}
}

运行结果如下:

[{“age”:20,“name”:“Jack”,“sex”:“man”},{“age”:18,“name”:“Marry”,“sex”:“woman”}]
[Person [name=Jack, sex=man, age=20], Person [name=Marry, sex=woman, age=18]]
Jack is a 20 years old man
Marry is a 18 years old woman

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值