Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会出现各种类库,框架以及工具来解决这些基础的问题,Jackson就是这些工具中的一个,使用这个工具开发者完全可以从手工结束Json数据的重复劳动中解放出来。使用Jackson首先需要下载相应的类库,如下的Maven dependency列出了完整的POM dependency。
? ? ? ? ? ? com.fasterxml.jackson.core
? ? ? ? ? ? jackson-core
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ? com.fasterxml.jackson.core
? ? ? ? ? ? jackson-annotations
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ? com.fasterxml.jackson.core
? ? ? ? ? ? jackson-databind
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ? com.fasterxml.jackson.dataformat
? ? ? ? ? ? jackson-dataformat-smile
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ? com.fasterxml.jackson.jaxrs
? ? ? ? ? ? jackson-jaxrs-json-provider
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ? ? ? com.fasterxml.jackson.module
? ? ? ? ? ? jackson-module-jaxb-annotations
? ? ? ? ? ? ${jackson-2-version}
? ? ? ?
比如我们需要解析的Json数据如下:
{
? "id": 123,
? "name": "Pankaj",
? "permanent": true,
? "address": {
? ? "street": "Albany Dr",
? ? "city": "San Jose",
? ? "zipcode": 95129
? },
? "phoneNumbers": [
? ? 123456,
? ],
? "role": "Manager",
? "cities": [
? ? "Los Angeles",
? ? "New York"
? ],
? "properties": {
? ? "age": "29 years",
? ? "salary": "1000 USD"
? }
}
对应的Model Class 如下:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
?
public class Employee {
?
? ? private int id;
? ? private String name;
? ? private boolean permanent;
? ? private Address address;
? ? private long[] phoneNumbers;
? ? private String role;
? ? private List cities;
? ? private Map properties;
? ?
? ? 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 isPermanent() {
? ? ? ? return permanent;
? ? }
? ? public void setPermanent(boolean permanent) {
? ? ? ? this.permanent = permanent;
? ? }
? ? public Address getAddress() {
? ? ? ? return address;
? ? }
? ? public void setAddress(Address address) {
? ? ? ? this.address = address;
? ? }
? ? public long[] getPhoneNumbers() {
? ? ? ? return phoneNumbers;
? ? }
? ? public void setPhoneNumbers(long[] phoneNumbers) {
? ? ? ? this.phoneNumbers = phoneNumbers;
? ? }
? ? public String getRole() {
? ? ? ? return role;
? ? }
? ? public void setRole(String role) {
? ? ? ? this.role = role;
? ? }
? ?
? ? @Override
? ? public String toString(){
? ? ? ? StringBuilder sb = new StringBuilder();
? ? ? ? sb.append("***** Employee Details *****\n");
? ? ? ? sb.append("ID="+getId()+"\n");
? ? ? ? sb.append("Name="+getName()+"\n");
? ? ? ? sb.append("Permanent="+isPermanent()+"\n");
? ? ? ? sb.append("Role="+getRole()+"\n");
? ? ? ? sb.append("Phone Numbers="+Arrays.toString(getPhoneNumbers())+"\n");
? ? ? ? sb.append("Address="+getAddress()+"\n");
? ? ? ? sb.append("Cities="+Arrays.toString(getCities().toArray())+"\n");
? ? ? ? sb.append("Properties="+getProperties()+"\n");
? ? ? ? sb.append("*****************************");
? ? ? ?
? ? ? ? return sb.toString();
? ? }
? ? public List getCities() {
? ? ? ? return cities;
? ? }
? ? public void setCities(List cities) {
? ? ? ? this.cities = cities;
? ? }
? ? public Map getProperties() {
? ? ? ? return properties;
? ? }
? ? public void setProperties(Map properties) {
? ? ? ? this.properties = properties;
? ? }
}
当我们需要操作Json数据的时候,如下代码示范了如何将Json数据反序列化为对象以及如何将对象序列化为Json数据。
import java.io.File;
import java.io.IOException;
i