跳到主要内容

JacksonUtil - JSON 处理

返回文档导航 | 工具类速查表


JacksonUtil 封装 Jackson ObjectMapper,提供 JSON 序列化、反序列化、路径取值能力。

序列化

String json = JacksonUtil.getJson(obj); // 对象 → JSON 字符串
byte[] bytes = JacksonUtil.toJsonAsBytes(obj); // 对象 → byte[]

反序列化

JSONMap map = JacksonUtil.readValue(json); // JSON → JSONMap
User user = JacksonUtil.readValue(json, User.class); // JSON → 指定类型
JSONList list = JacksonUtil.readList(json); // JSON → JSONList
List<User> users = JacksonUtil.readListValue(json, User.class);

支持多种输入类型:

// String, byte[], InputStream, File, URL, Reader 均可
User user = JacksonUtil.readValue(inputStream, User.class);
User user = JacksonUtil.readValue(file, User.class);

静默失败版本(异常时返回 null):

User user = JacksonUtil.read(json, User.class);

路径取值

// 从任意对象按路径取值
Object val = JacksonUtil.at(data, "user.profile.city");
String val = JacksonUtil.at(data, "user.name", String.class);
Integer val = JacksonUtil.at(data, "user.age", Integer.class);

路径语法:点号访问对象属性(a.b.c),方括号访问数组索引([0]),支持负索引([-1])。

类型转换

// 跨类型转换
User user = JacksonUtil.convertValue(map, User.class);
JSONMap map = JacksonUtil.convertValue(user, JSONMap.class);

还有 coverObj 方法,功能类似:

User user = JacksonUtil.coverObj(map, User.class);

路径拆分(splitKey)

路径解析器是手写的(约 40 行,非正则),支持 a.b.ca[0].b[1][2].c 等格式:

VAL<String, String> keys = JacksonUtil.splitKey("a.b[1].c");
// keys.v1 = "a", keys.v2 = "b[1].c"

JSON 格式校验

boolean isObj = JacksonUtil.isJsonObj(str); // 判断是否为 JSON 对象
boolean isArray = JacksonUtil.isJsonArray(str); // 判断是否为 JSON 数组

ObjectMapper 实例

ObjectMapper mapper = JacksonUtil.getInstance(); // 获取 ObjectMapper 实例
boolean can = JacksonUtil.canSerialize(value); // 判断对象是否可序列化

JavaType 构建

// 构建带泛型的 JavaType
JavaType type = JacksonUtil.mkJavaType(List.class, User.class);
JavaType type = JacksonUtil.mkJavaTypeByJavaTypes(List.class, userJavaType);

配置说明

  • 默认日期格式:yyyy-MM-dd HH:mm:ss
  • 忽略未知属性
  • 支持单引号和无引号字段名
  • 自定义 ObjectDeserializer:Object 类型默认反序列化为 JSONMap/JSONList

← 上一节:ValUtil | 返回文档导航 | 下一节:DateUtil →