# jackson-util **Repository Path**: zhangjian-eng/jackson-util ## Basic Information - **Project Name**: jackson-util - **Description**: 工具类:序列化,递归解析字符串 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-22 - **Last Updated**: 2021-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### maven 依赖 ```xml com.fasterxml.jackson.core jackson-databind 2.10.0 com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.10.0 ``` ### JacksonUtil 工具类 ```Java package util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.JsonNodeType; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * jackson 工具类 * * @author zhangjian * @version 1.0.0 * @since 2021/09/21 15:19 */ public class JacksonUtil { public static final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule()); static { // 反序列化时忽略不存在的JavaBean属性: mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } /** 工具类不允许外界创建对象 */ private JacksonUtil() { } /** * 嵌套 JSONString 转 Map */ public static HashMap parseJsonNode(String json) throws JsonProcessingException { HashMap map = new HashMap<>(); JsonNode jsonNode = mapper.readTree(json); parseJsonNode(jsonNode, map, ""); return map; } private static void parseJsonNode(JsonNode jsonNode, Map map, String key) { JsonNodeType nodeType = jsonNode.getNodeType(); // 数组 if (nodeType == JsonNodeType.ARRAY) { Iterator elements = jsonNode.elements(); int i = 0; while (elements.hasNext()) { parseJsonNode(elements.next(), map, key + String.format("[%d]", i++)); } } // 对象 else if (nodeType == JsonNodeType.OBJECT) { Iterator> fields = jsonNode.fields(); while (fields.hasNext()) { Map.Entry field = fields.next(); parseJsonNode(field.getValue(), map, key + "." + field.getKey()); } } // 数字 / 字符串 else if(nodeType == JsonNodeType.NUMBER || nodeType == JsonNodeType.STRING){ map.put(key, jsonNode.textValue()); }else { throw new UnsupportedOperationException("unknown JsonNodeType"); } } public static T jsonToObject(String json, Class t) throws JsonProcessingException { return mapper.readValue(json, t); } public static String objectToString(Object obj) throws JsonProcessingException { return mapper.writeValueAsString(obj); } } ``` ### 自定义序列化 ```java package util; import java.io.IOException; import java.math.BigInteger; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; /** * 自定义序列化 */ public class IsbnDeserializer extends JsonDeserializer { @Override public BigInteger deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String s = p.getValueAsString(); if (s != null) { try { return new BigInteger(s.replace("-", "")); } catch (NumberFormatException e) { throw new JsonParseException(p, s, e); } } return null; } } ``` ### 实体类 ```java package bean; import java.math.BigDecimal; import java.math.BigInteger; import java.time.LocalDate; import java.util.List; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import util.IsbnDeserializer; import lombok.Data; @Data public class Book { private long id; private String name; private String author; @JsonDeserialize(using = IsbnDeserializer.class) private BigInteger isbn; private List tags; private LocalDate pubDate; private BigDecimal price; } ``` ### 资源文件 `book.json` ```json { "id": 1, "name": "Java核心技术", "author": "Cay S. Horstmann", "isbn": "978-7-111-54742-6", "tags": ["Java", "Network"], "pubDate": "2016-09-01", "price": 119.5 } ``` `albumList.json` ``` { "id": 1, "name": "Java核心技术", "author": "Cay S. Horstmann", "isbn": "978-7-111-54742-6", "tags": ["Java", "Network", "spring"], "pubDate": "2016-09-01", "public": { "id": 1, "name": "Java核心技术", "author": "Cay S. Horstmann", "isbn": "978-7-111-54742-6", "tags": ["Java", "Network"], "pubDate": "2016-09-01", "price": { } } } ```