Jackson(一)Streaming API

Jackson包

这里写图片描述


实体类

public class Person implements Serializable {
    private static final long serialVersionUID = -4653164706668338935L;
    private int id;
    private String username;
    private String password;
    private Address address;
    private String[] hobby;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    public String[] getHobby() {
        return hobby;
    }
    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", username=" + username + ", password="
                + password + ", address=" + address + ", hobby="
                + Arrays.toString(hobby) + "]";
    }
}

public class Address implements Serializable {
    private static final long serialVersionUID = 1310389268587385235L;
    private String city;
    private String street;

    public Address() {
        super();
    }
    public Address(String city, String street) {
        super();
        this.city = city;
        this.street = street;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    @Override
    public String toString() {
        return "Address [city=" + city + ", street=" + street + "]";
    }
}

JsonGenerator使用

@Test
public void testJsonGenerator() throws IOException {
    //关键对象,可以重用
    ObjectMapper mapper = new ObjectMapper();
    //获得JsonFactory对象
    JsonFactory factory = mapper.getFactory();
    factory.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);

    //获得生成的json文件的根路径
    String basePath = this.getClass().getClassLoader().getResource("").getPath().substring(1);
    JsonGenerator jsonGenerator = factory.createGenerator(
                                        new File(basePath+"generator.json"), JsonEncoding.UTF8);
    //格式化打印json文件
    jsonGenerator.useDefaultPrettyPrinter();

    //开启写对象模式
    jsonGenerator.writeStartObject();
    jsonGenerator.writeNumberField("id", 1006);
    jsonGenerator.writeStringField("username", "TangSanZang");
    jsonGenerator.writeStringField("password", "jiubugaosuni");
    jsonGenerator.writeObjectField("address", 
                        new Address("ShangHai", "NanJiangRoad"));
    jsonGenerator.writeArrayFieldStart("hobby");
    jsonGenerator.writeString("eat");
    jsonGenerator.writeString("drink");
    jsonGenerator.writeString("football");
    jsonGenerator.writeEndArray();
    jsonGenerator.writeEndObject();

    jsonGenerator.close();
}
上面代码执行完毕后,生成的Json文件如下
{
  "id" : 1006,
  "username" : "TangSanZang",
  "password" : "jiubugaosuni",
  "address" : {
    "city" : "ShangHai",
    "street" : "NanJiangRoad"
  },
  "hobby" : [ "eat", "drink", "football" ]
}

JsonParser使用

@Test
public void testJsonParser() throws IOException {
    //关键对象,可以重用
    ObjectMapper mapper = new ObjectMapper();
    //获得JsonFactory对象
    JsonFactory factory = mapper.getFactory();
    factory.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
    factory.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
    factory.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);

    InputStream in = this.getClass().getClassLoader().getResourceAsStream("generator.json");
    JsonParser jsonParser = factory.createParser(in);

    //用于封装数据的实体类
    Person person = new Person();
    while(jsonParser.nextToken() != JsonToken.END_OBJECT){
        String filedName = jsonParser.getCurrentName();
        if("id".equals(filedName)){
            jsonParser.nextToken();
            person.setId(jsonParser.getValueAsInt());
        }
        if("username".equals(filedName)){
            jsonParser.nextToken();
            person.setUsername(jsonParser.getValueAsString());
        }
        if("password".equals(filedName)){
            jsonParser.nextToken();
            person.setPassword(jsonParser.getValueAsString());
        }
        if("address".equals(filedName)){
            Address address = new Address();
            while(jsonParser.nextToken() != JsonToken.END_OBJECT){
                String referenceFieldName = jsonParser.getCurrentName();
                if("city".equals(referenceFieldName)){
                    jsonParser.nextToken();
                    address.setCity(jsonParser.getValueAsString());
                }
                if("street".equals(referenceFieldName)){
                    jsonParser.nextToken();
                    address.setStreet(jsonParser.getValueAsString());
                }
            }
            person.setAddress(address);
        }
        if("hobby".equals(filedName)){
            StringBuilder builder = new StringBuilder();
            jsonParser.nextToken();
            while(jsonParser.nextToken() != JsonToken.END_ARRAY){
                builder.append(jsonParser.getValueAsString()+",");
            }
            person.setHobby(builder.toString().split(","));
        }
    }
    System.out.println(person);
    jsonParser.close();
}
上面的代码执行完毕后,实体类封装了json数据
Person [id=1006, username=TangSanZang, password=jiubugaosuni, address=Address [city=ShangHai, street=NanJiangRoad], hobby=[eat, drink, football]]

你可能感兴趣的:(Jackson(一)Streaming API)