jackson的简单使用

1、简单介绍

Jackson 的核心模块由三部分组成。

  • jackson-core,核心包,提供基于"流模式"解析的相关 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。
  • jackson-annotations,注解包,提供标准注解功能;
  • jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析的相关 API ( ObjectMapper ) 和"树模型" 解析的相关 API (JsonNode);基于"对象绑定" 解析的 API 和"树模型"解析的 API 依赖基于"流模式"解析的 API。

jackson-databind 依赖 jackson-core 和 jackson-annotations,所以可以只显示地添加jackson-databind依赖,jackson-core 和 jackson-annotations 也随之添加到 Java 项目工程中。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.3</version>
</dependency>

2、简单使用

2.1、如何匹配JSON对象的字段和Java对象的属性

​ 默认情况下,Jackson通过将JSON字段的名称与Java对象中的getter和setter方法进行匹配,将JSON对象的字段映射到Java对象中的属性。 Jackson删除了getter和setter方法名称的“ get”和“ set”部分,并将其余名称的第一个字符转换为小写。

例如,名为brand的JSON字段与名为getBrand()和setBrand()的Java getter和setter方法匹配。 名为engineNumber的JSON字段将与名为getEngineNumber()和setEngineNumber()的getter和setter匹配。

如果需要以其他方式将JSON对象字段与Java对象字段匹配,则需要使用自定义序列化器和反序列化器,或者使用一些Jackson注解。

2.2、JSON字符串–>Java对象

JSON字符串作为第一个参数传递给ObjectMapper的readValue()方法。

ObjectMapper objectMapper = new ObjectMapper();

String carJson = "{ \"brand\" : \"Mercedes\", \"doors\" : 6 }";
Car car = objectMapper.readValue(carJson, Car.class);   	//readValue()方法

System.out.println(car); 

2.3、JSON数组字符串–>List

String jsonArray = "[{\"brand\":\"ford\"}, {\"brand\":\"Fiat\"}]";
ObjectMapper objectMapper = new ObjectMapper();

List<Car> cars = objectMapper.readValue(jsonArray, new TypeReference<List<Car>>(){});

System.out.println(cars);

2.4、JSON字符串–>Map

String jsonObject = "{\"brand\":\"ford\", \"doors\":5}";
ObjectMapper objectMapper = new ObjectMapper();

Map<String, Object> jsonMap = objectMapper.readValue(jsonObject,new TypeReference<Map<String,Object>>(){});

System.out.println(jsonMap);

2.5Java对象–>JSON

Jackson ObjectMapper也可以用于从对象生成JSON。 可以使用以下方法之一进行操作

  • writeValue()
  • writeValueAsString()
  • writeValueAsBytes()
ObjectMapper objectMapper = new ObjectMapper();

Car car = new Car();
car.setBrand("BMW");
car.setDoors(4);

//将Car对象转换为JSON并将其写入给定的FileOutputStream
objectMapper.writeValue( new FileOutputStream("data/output-2.json"), car);

json = objectMapper.writeValueAsString(car);

2.6、Jackson日期转化

默认情况下,Jackson会将java.util.Date对象序列化为其long型的值,该值是自1970年1月1日以来的毫秒数。但是,Jackson还支持将日期格式化为字符串。

实体类

package cn.wideth.jackson;

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;

@Data
@AllArgsConstructor
public class Transaction {

    private String type = null;

    private Date date = null;

}

测试

Transaction transaction = new Transaction("transfer", new Date());

ObjectMapper objectMapper = new ObjectMapper();
String output = null;

output = objectMapper.writeValueAsString(transaction);

System.out.println(output);

Date–>String

        Transaction transaction = new Transaction("transfer", new Date());

        ObjectMapper objectMapper = new ObjectMapper();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        objectMapper.setDateFormat(dateFormat);

        String output2 = null;
        output2 = objectMapper.writeValueAsString(transaction);
     
        System.out.println(output2);

更详细的情况请查看:

https://blog.csdn.net/qq_31960623/article/details/117778291



posted @ 2022-07-15 12:40  z-laoyao  阅读(245)  评论(0编辑  收藏  举报