Jackson(一)Streaming API

本文介绍如何使用Jackson库进行JSON文件的生成和解析。通过示例代码展示了如何创建JSON文件,并将Java对象序列化为JSON格式。同时,也演示了如何从JSON文件中反序列化出Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值