fastjson
maven 依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>x.x.x</version>
</dependency>
Fastjson API
定义 Bean
Group.java
public class Group {
private Long id;
private String name;
private List<User> users = new ArrayList<User>();
}
User.java
public class User {
private Long id;
private String name;
}
初始化 Bean
Group group = new Group();
group.setId(0L);
group.setName("admin");
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");
group.addUser(guestUser);
group.addUser(rootUser);
序列化
String jsonString = JSON.toJSONString(group);
System.out.println(jsonString);
反序列化
Group bean = JSON.parseObject(jsonString, Group.class);
Fastjson 注解
@JSONField
可以配置在属性(setter、getter)和字段(必须是 public field)上。
@JSONField(name="ID")
public int getId() {return id;}
// 配置date序列化和反序列使用yyyyMMdd日期格式
@JSONField(format="yyyyMMdd")
public Date date1;
// 不序列化
@JSONField(serialize=false)
public Date date2;
// 不反序列化
@JSONField(deserialize=false)
public Date date3;
// 按ordinal排序
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
@JSONType
JSONType.alphabetic 属性: fastjson 缺省时会使用字母序序列化,如果你是希望按照 java fields/getters 的自然顺序序列化,可以配置 JSONType.alphabetic,使用方法如下:
@JSONType(alphabetic = false)
public static class B {
public int f2;
public int f1;
public int f0;
}
案例
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
Map 转 JSON 字符串
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test1 {
@Test
public void test1() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "One");
map.put("key2", "Two");
String mapJson = JSON.toJSONString(map);
System.out.println(mapJson);//输出:{"key1":"One","key2":"Two"}
}
}
POJO List 转 JSON 字符串
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test6 {
@Test
public void test6() {
Person person1 = new Person();
person1.setName("张三");
person1.setAge(28);
person1.setBirthday(new Date());
Person person2 = new Person();
person2.setName("李四");
person2.setAge(25);
person2.setBirthday(new Date());
List<Person> persons = new ArrayList<Person>();
persons.add(person1);
persons.add(person2);
String object = JSON.toJSONString(persons);
System.out.println(object);
/**输出如下:
* [{"age":28,"birthday":1530511546991,"name":"张三"},{"age":25,"birthday":1530511546991,"name":"李四"}]
*/
}
}
import javax.xml.crypto.Data;
import java.util.Date;
public class Person {
public String name;
public String Sex;
public int Age;
public Date Birthday;
public void setName(String name) {
this.name = name;
}
public void setSex(String Sex) {
this.Sex = Sex;
}
public void setAge(int Age) {
this.Age = Age;;
}
public void setBirthday(Date Birthday) {
this.Birthday = Birthday;;
}
}
Json 字符串转 JsonObject
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test2 {
@Test
public void test2() {
String jsonStr = "{\"key1\":\"One\",\"key2\":\"110\"}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject.getString("key1"));//输出one
System.out.println(jsonObject.getInteger("key2"));//输出110
System.out.println(jsonObject.getString("key3"));//输出null
}
}
JsonObject 转 Json 字符串
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test3 {
@Test
public void test3() {
String jsonStr = "{\"key1\":\"One\",\"key2\":\"110\"}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject.getString("key1"));//输出:one
System.out.println(jsonObject.getInteger("key2"));//输出:110
System.out.println(jsonObject.getString("key3"));//输出:null
String parserJsonStr = JSONObject.toJSONString(jsonObject);
System.out.println(parserJsonStr);//输出:{"key1":"One","key2":"110"}
}
}
JSONArray 添加 JSONObject
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test4 {
@Test
public void test4() {
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("name", "张三");
jsonObject1.put("age", 25);
JSONObject jsonObject2 = new JSONObject();
jsonObject2.put("name", "李四");
jsonObject2.put("age", 28);
JSONArray jsonArray = new JSONArray();
jsonArray.add(jsonObject1);
jsonArray.add(jsonObject2);
String jsonArrStr = JSONArray.toJSONString(jsonArray);
System.out.println(jsonArrStr);//输出:[{"name":"张三","age":25},{"name":"李四","age":28}]
}
}
Json 数组字符串转 JsonArray
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test5 {
@Test
public void test5() {
String jsonArrStr = "[{\"name\":\"张三\",\"age\":25},{\"name\":\"李四\",\"age\":28}]";
JSONArray jsonArray = JSONArray.parseArray(jsonArrStr);
for (Object object : jsonArray) {
JSONObject jsonObject = (JSONObject) object;
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getString("age"));
System.out.println("--------------");
}
}
}
POJO 转 Json 字符串
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test7 {
@Test
public void test7() {
Person person1 = new Person();
person1.setName("张三");
person1.setAge(26);
person1.setBirthday(new Date());
/**两种方式都行
* 因为JSONObject继承了JSON*/
String object = JSONObject.toJSONString(person1);
/*String object = JSON.toJSONString(person1);*/
System.out.println(object);
/**输出如下:
* {"age":26,"birthday":1530511790302,"name":"张三"}
*/
}
}
POJO 转 JsonObject
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test8 {
@Test
public void test8() {
Person person1 = new Person();
person1.setName("张三");
person1.setAge(28);
person1.setBirthday(new Date());
/**方式一*/
String jsonStr = JSONObject.toJSONString(person1);
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
System.out.println(jsonObject.get("name"));//输出:张三
/**方式二*/
JSONObject jsonObject1 = (JSONObject)JSONObject.toJSON(person1);
System.out.println(jsonObject1.get("age"));//输出:28
}
}
POJO List 转 JsonArray
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test9 {
@Test
public void test9() {
Person person1 = new Person();
person1.setName("张三");
person1.setAge(28);
person1.setBirthday(new Date());
Person person2 = new Person();
person2.setName("李四");
person2.setAge(25);
person2.setBirthday(new Date());
List<Person> persons = new ArrayList<Person>();
persons.add(person1);
persons.add(person2);
/**方式1*/
String jsonArrStr = JSONArray.toJSONString(persons);
JSONArray jsonArray = JSONArray.parseArray(jsonArrStr);
JSONObject jsonObject1 = (JSONObject)jsonArray.get(0);
System.out.println(jsonObject1.get("name"));//输出:张三
/**方式2*/
JSONArray jsonArray1 = (JSONArray)JSONArray.toJSON(persons);
JSONObject jsonObject2 = (JSONObject)jsonArray1.get(1);
System.out.println(jsonObject2.get("name"));//输出:李四
}
}
JsonObject 转 POJO
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test10 {
@Test
public void test10() {
String content = "{\"PARENT_ID\":1,\"NAME\":\"正式\",\"CODE\":\"101\",\"LEVEL_NUM\":2,\"ID\":2}";
Map map = JSONObject.parseObject(content, Map.class);//json 对象转 map
System.out.println(map);//输出:{CODE=101, LEVEL_NUM=2, ID=2, PARENT_ID=1, NAME=国家级正职}
}
}
将Json 对象 转 Java Bean
@Test
public void test10_2() {
Person person1 = new Person();
person1.setName("张三");
person1.setAge(28);
person1.setBirthday(new Date());
String jsonPOJOStr = JSON.toJSONString(person1);
Person person = JSONObject.parseObject(jsonPOJOStr, Person.class);
System.out.println(person);
/**
* 输出:Person{age=28, name='张三', birthday=Mon Jul 02 14:27:53 CST 2018}
*/
}
JsonArray 转 POJO List
import com.alibaba.fastjson.*;
import org.junit.Test;
import java.util.*;
public class test11 {
@Test
public void test2() {
String content = "[{\"PARENT_ID\":1,\"NAME\":\"国家级正职\",\"CODE\":\"101\",\"LEVEL_NUM\":2,\"ID\":2},{\"PARENT_ID\":1,\"NAME\":\"国家级副职\",\"CODE\":\"102\",\"LEVEL_NUM\":2,\"ID\":3}]";
//parseArray(String text, Class<T> clazz):clazz 指定 list 中的元素类型
List<Map> mapList = JSONArray.parseArray(content, Map.class);//json 转 List<Map>
System.out.println(mapList);
}
}
将Json 数组 转 Java List
@Test
public void test11() {
String jsonArrPOJOStr = "[{\"birthday\":1530512954968,\"name\":\"张三\",\"age\":28}," +
"{\"birthday\":1530512954968,\"name\":\"李四\",\"age\":25}]";
List<Person> personList = JSONArray.parseArray(jsonArrPOJOStr, Person.class);
for (Person person : personList) {
System.out.println(person);
}
/**
* 输出:
* Person{age=28, name='张三', birthday=Mon Jul 02 14:29:14 CST 2018}
* Person{age=25, name='李四', birthday=Mon Jul 02 14:29:14 CST 2018}
*/
}
Source & Reference
https://dunwu.github.io/javatech/lib/serialized/javalib-json.html
https://blog.csdn.net/wangmx1993328/article/details/80882745