import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.junit.Test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class ObjectMapperWriteDemo {
/**
* Write JSON From Objects
* 从对象写入 JSON 文件
* 可用于使用提供的输出流(使用编码JsonEncoding.UTF8 )将任何 Java 值序列化为 JSON 输出的方法。
* 注意:方法在这里没有显式关闭底层流;
* 但是,此映射器使用的JsonFactory可能会根据其设置选择关闭流(默认情况下,当我们构造的JsonGenerator关闭时,它将尝试关闭它)。
*
* @throws IOException
*/
@Test
public void test1() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.setBrand("BMW");
car.setDoors(4);
objectMapper.writeValue(new FileOutputStream("src/data/output-2.json"), car);
}
/**
* 可用于将任何 Java 值序列化为字符串的方法。
* 功能上等同于使用StringWriter调用writeValue(Writer, Object)并构造 String,但效率更高。
*
* @throws JsonProcessingException
*/
@Test
public void test2() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.setBrand("BMW");
car.setDoors(4);
String json = objectMapper.writeValueAsString(car);
System.out.println(json);
}
/**
* 可用于将任何 Java 值序列化为字节数组的方法。
* 在功能上等同于使用ByteArrayOutputStream调用writeValue(Writer, Object)并获取字节,但效率更高。
* 使用的编码将是 UTF-8。
*
* @throws JsonProcessingException
*/
@Test
public void test3() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car();
car.setBrand("BMW");
car.setDoors(4);
byte[] json = objectMapper.writeValueAsBytes(car);
System.out.println(Arrays.toString(json));
}
/**
* 可用于将任何 Java 值序列化为字节数组的方法。
* 在功能上等同于使用ByteArrayOutputStream调用writeValue(Writer, Object)并获取字节,但效率更高。
* 使用的编码将是 UTF-8。
*
* @throws JsonProcessingException
*/
@Test
public void test4() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module =
new SimpleModule("CarSerializer", new Version(2, 1, 3, null, null, null));
module.addSerializer(Car.class, new StdSerializer<Car>(Car.class) {
@Override
public void serialize(Car car, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("producer", car.getBrand());
jsonGenerator.writeNumberField("doorCount", car.getDoors());
jsonGenerator.writeEndObject();
}
});
objectMapper.registerModule(module);
Car car = new Car();
car.setBrand("Mercedes");
car.setDoors(5);
String carJson = objectMapper.writeValueAsString(car);
System.out.println(carJson);
}
}