首页 > 其他分享 >JacksonUtils - 封装基于 jackson 的 json 转换逻辑代码

JacksonUtils - 封装基于 jackson 的 json 转换逻辑代码

时间:2023-11-29 17:46:57浏览次数:35  
标签:return param json jackson JsonProcessingException obj JacksonUtils throws

JacksonUtils.java
package org.example.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * jackson 工具类
 */
public class JacksonUtils {

    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 八大基本数据类型
     */
    private static final List<Class> baseType = Arrays.asList(new Class[]{Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, Character.class, Boolean.class});

    /**
     * 对象转 json,用于引用类型,包括 json 格式的字符串
     *
     * @param obj
     * @return
     * @throws JsonProcessingException
     */
    public static String toJson(Object obj) throws JsonProcessingException {
        toJsonCheckType(obj);
        if (obj instanceof String) {
            obj = toJsonNode((String) obj);
            return obj.toString();
        }
        return objectMapper.writeValueAsString(obj);
    }

    /**
     * 对象转 json,保留缩进,用于引用类型,包括 json 格式的字符串
     *
     * @param obj
     * @return
     * @throws JsonProcessingException
     */
    public static String toPrettyJson(Object obj) throws JsonProcessingException {
        toJsonCheckType(obj);
        if (obj instanceof String) {
            obj = toJsonNode((String) obj);
            return ((JsonNode) obj).toPrettyString();
        }
        return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
    }

    /**
     * toJson 检测,null 和 八大基本数据类型检测
     *
     * @param obj
     */
    private static void toJsonCheckType(Object obj) {
        if (obj == null) {
            throw new RuntimeException("obj -> null, 不支持转换为 json");
        }
        if (baseType.contains(obj.getClass())) {
            throw new RuntimeException(String.format("obj -> %s, %s 类型不支持转换为 json", obj, obj.getClass().getSimpleName()));
        }
    }

    /**
     * json 转对象
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     * @throws JsonProcessingException
     */
    public static <T> T toObject(String json, Class<T> clazz) throws JsonProcessingException {
        return objectMapper.readValue(json, clazz);
    }

    /**
     * json 转集合
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     * @throws JsonProcessingException
     */
    public static <T> List<T> toList(String json, Class<T> clazz) throws JsonProcessingException {
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, clazz);
        return objectMapper.readValue(json, javaType);
    }

    /**
     * json 字符串转 JsonNode,即 JsonObject
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static JsonNode toJsonNode(String json) throws JsonProcessingException {
        JsonNode jsonNode = objectMapper.readTree(json);
        if (!jsonNode.isObject() && !jsonNode.isArray()) {
            throw new RuntimeException("json -> " + json + ", 不是合法的 Json 或 JsonArray");
        }
        return jsonNode;
    }

    /**
     * json 字符串转 JsonNode 集合,即 JsonObject 集合
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static List<JsonNode> toJsonNodeList(String json) throws JsonProcessingException {
        List<JsonNode> list = new ArrayList<>();
        JsonNode jsonNode = toJsonNode(json);
        if (jsonNode.isArray()) {
            jsonNode.iterator().forEachRemaining(e -> list.add(e));
        } else {
            throw new RuntimeException("json -> " + json + ", 不是合法的 ArrayNode");
        }
        return list;
    }

    /**
     * json 字符串转 ObjectNode,即 JsonObject
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static ObjectNode toObjectNode(String json) throws JsonProcessingException {
        JsonNode jsonNode = toJsonNode(json);
        if (jsonNode.isObject()) {
            return (ObjectNode) jsonNode;
        }
        throw new RuntimeException("json -> " + json + ", 不是合法的 ObjectNode");
    }

    /**
     * json 字符串转 ArrayNode,即 JsonArray
     *
     * @param json
     * @return
     * @throws JsonProcessingException
     */
    public static ArrayNode toArrayNode(String json) throws JsonProcessingException {
        JsonNode jsonNode = toJsonNode(json);
        if (jsonNode.isArray()) {
            return (ArrayNode) jsonNode;
        }
        throw new RuntimeException("json -> " + json + ", 不是合法的 ArrayNode");
    }

}

 

标签:return,param,json,jackson,JsonProcessingException,obj,JacksonUtils,throws
From: https://www.cnblogs.com/nihaorz/p/17865442.html

相关文章

  • 使用html文件渲染浏览器翻译json文件
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>PreTagExample</title&......
  • JsonResponse源码分析
    1.视图层返回JsonResponsereturnJsonResponse({'name':'kevin','age':19})2.触发JsonResponse的__init__方法将{'name':'kevin','age':19}传给data3.源码分析def__init__(self,data,encoder=DjangoJSONEn......
  • yaml/json/ini 配置读取
    ConfigParser安装ConfigParser是解析配置文件的第三方库,须要安装pipinstallConfigParserpipinstallConfigParserConfigParser介绍ConfigParser是用来读取配置文件(能够是.conf,txt,ini)的包配置文件的格式如下:中括号'[]'内包含的为section。section下面为option,相似......
  • Golang Gin 获取Restful参数、URL查询参数,Form 表单参数,JSON格式参数
    前言http请求中,可以通过URL查询参数提交数据到服务器,可以通过post的json方式,还有一直方式就是Form表单。Form表单相比URL查询参数,用户体验好,可以承载更多的数据,尤其是文件上传时,特别方便。这里推荐飞雪无情的博客;写了一些列的gin的使用教程,很时候新手学习如果想对gin有一个完整......
  • SQL SERVER JSON_QUERY JSON_VALUE
    response_json:{"code":"000","message":"成功","data":{"secretKey":"","content":"{\"rule_result\":{\"risk_level\&q......
  • 页面的json数据浏览器无法访问,还有什么别的办法获取数据?
    大家好,我是皮皮。一、前言前几天在Python钻石流群【空】问了一个Python网络爬虫的问题,一起来看看吧。问题描述:请教一个问题,页面的json数据浏览器无法访问,还有什么别的办法获取数据图片如下:这个问题看上去有点怪怪的。二、实现过程看上去代码倒是很简洁,没啥难度,这里【猫药......
  • # yyds干货盘点 # 页面的json数据浏览器无法访问,还有什么别的办法获取数据?
    大家好,我是皮皮。一、前言前几天在Python钻石流群【空】问了一个Python网络爬虫的问题,一起来看看吧。问题描述:请教一个问题,页面的json数据浏览器无法访问,还有什么别的办法获取数据图片如下:这个问题看上去有点怪怪的。二、实现过程看上去代码倒是很简洁,没啥难度,这里【猫药师Kelly】......
  • Python-JSON文件操作简化的工具库,支持读取和修改
    这是一个关于python操控json的工具类可以利用get方法以路径的形式查看内容,输出的格式为列表或字典change方法用于修改指定路径下的内容,支持修改内容为字典和列表的形式修改后使用save方法进行保存以下是代码:importjsonimporttimeimportrandomclassError_message:......
  • json-server的增删改查与基本使用
    1.查看是否安装node2.查看是否安装npm3.安装json-server4.查看json-server的版本5.json-server--watchdb.json6.配置db.json文件下载 apifoxjson-server的增删改查在apifox中创建一个快捷调试直接点击发送,当body中返回下面内容,表示添加成功注意:不需要添加id,他会自......
  • npm学习(十六)之package-lock.json和package.json的作用
      转自:https://www.cnblogs.com/cangqinglang/p/8336754.htmlpackage-lock.json的作用就是锁定安装依赖时包的版本,并且需要上传到git,以保证其他人npminstall时安装的依赖能够保持一致 根据官方文档,这个package-lock.json是在`npminstall`时候生成的一份文件,用以记录......