ObjectMapper 对象的基本使用(二)
一.简介
Jackson ObjectMapper可以从字符串、流或文件解析JSON,并创建Java对象或对象图来表示已解析的JSON。将JSON解析为Java对象也称为从JSON反序列化Java对象
Jackson ObjectMapper也可以从Java对象创建JSON. 从Java对象生成JSON的过程也被称为序列化Java对象到JSON
二.依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.6</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.6</version>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.6</version>
</dependency>
public class Car {private String brand = null;private int doors = 0;public String getBrand() { return this.brand; }public void setBrand(String brand){ this.brand = brand;}public int getDoors() { return this.doors; }public void setDoors (int doors) { this.doors = doors; }
}
三.从 JSON 数组字符串读取 Java List 对象
String jsonArray = "[{\\"brand\\":\\"ford\\"}, {\\"brand\\":\\"Fiat\\"}]";
ObjectMapper objectMapper = new ObjectMapper();
List<Car> cars1 = objectMapper.readValue(jsonArray, new TypeReference<List<Car>>(){});
四.从 JSON 字符串读取 Java Map 对象
ObjectMapper可以从JSON字符串读取一个Java Map, 当你不知道要提取的JSON的格式的时候非常有用. 一般会把JSON对象读取到一个JavaMap对象中. 每一个JSON对象的属性都会变成JavaMap中的键值对。
String jsonObject = "{\\"brand\\":\\"ford\\", \\"doors\\":5}";
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> jsonMap = objectMapper.readValue(jsonObject, new TypeReference<Map<String,Object>>(){});
五.把对象序列化成 JSON
ObjectMapper实例也可以用来从一个对象生成JSON数据. 可以使用下列方法:
writeValue()
writeValueAsString()
writeValueAsBytes()
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.brand = "BYD";
car.doors = 4;
objectMapper.writeValue(new FileOutputStream("data/output-2.json"), car);
writeValueAsString() 和writeValueAsBytes()也可以从对象生成JSON, 并且返回一个String或Byte数组的JSON, 如下:
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.brand = "BMW";
car.doors = 4;
String json = objectMapper.writeValueAsString(car);
System.out.println(json);
输出结果是:
{"brand":"BYD","doors":4}
六.Jackson 的日期格式化—Date 到 long
如下是一个包含Date类型属性的Java类:
public class Transaction {private String type = null;private Date date = null;public Transaction() {}public Transaction(String type, Date date) {this.type = type;this.date = date;}public String getType() {return type;}public void setType(String type) {this.type = type;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}
}
用ObjectMapper序列化Transaction类对象的过程和其他Java对象一样:
Transaction transaction = new Transaction("transfer", new Date());
ObjectMapper objectMapper = new ObjectMapper();
String output = objectMapper.writeValueAsString(transaction);
System.out.println(output);
序列化结果:
{"type":"transfer","date":1516442298301}
属性date被序列化为了一个long型整数