基于FastJson封装的工具类

package com.shopcider.plutus.component.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.shopcider.plutus.component.exception.BizException;

import java.util.Map;

public class JSONUtil {

    /**
     * 返回的一定是null
     * @param exception
     * @param errorMessage
     * @return
     */
    public static <T> T nullOrException(boolean exception, String errorMessage) {
        if(exception) {
            throw new BizException(errorMessage);
        } else {
            return null;
        }
    }

    public static JSONObject getJSONObjectHasArrayByKeys(JSONObject jsonObject, Map<String, Integer> arrayKeyAndIndex,
                                                         String... keys) {
        return getJSONObjectHasArrayByKeys(jsonObject, arrayKeyAndIndex, true, keys);
    }


    /**
     * 连续找jsonObject避免空指针原因太难发现
     * @param jsonObject 保证了返回的一定不为null
     * @param keys
     * @return
     */
    public static JSONObject getJSONObjectByKeys(JSONObject jsonObject, String... keys) {
        return getJSONObjectByKeys(jsonObject, true, keys);
    }

    public static JSONArray getJSONArrayByKeys(JSONObject jsonObject, String... keys) {
        return getJSONArrayByKeys(jsonObject, true, keys);
    }

    /**
     * 连续找jsonObject避免空指针原因太难发现
     * @param jsonObject 保证了返回的一定不为null
     * @param arrayKeyAndIndex 支持负数从倒数开始,但是绝对值小于size
     * @param keys
     * @return
     */
    public static JSONObject getJSONObjectHasArrayByKeys(JSONObject jsonObject, Map<String, Integer> arrayKeyAndIndex,
                                                         boolean exception, String... keys) {
        if(jsonObject == null || arrayKeyAndIndex == null) {
            return nullOrException(exception,"jsonObject and keyAndIndex must not null!");
        }
        StringBuilder sb = new StringBuilder();
        JSONObject t = jsonObject;
        Object o;
        for(String k : keys) {
            Integer i = arrayKeyAndIndex.get(k);
            o = t.get(k);
            sb.append(k);
            if(o == null) {
                return nullOrException(exception,
                        "找不到对应的key: " + sb.toString() + " 对象: " + jsonObject.toJSONString());
            }
            //json数组的处理
            if(i != null) {
                if(o instanceof JSONArray == false) {
                    return nullOrException(exception, "key: " + sb.toString() + " 不是JSONArray类型而是 " + o.getClass().getName()
                            + " 类型. 对象: " + jsonObject.toJSONString());
                }
                JSONArray a = (JSONArray) o;
                if(a.size() <= Math.abs(i)) {
                    return nullOrException(exception, "key: " + sb.toString() + " 对应的JSONArray大小为 " + a.size() + " ,获取不到以 "
                            + i + " 为下标的数据。" + "对象: " + jsonObject.toJSONString());
                }
                o = a.get(i < 0 ? a.size() + i : i);
            }
            //json对象的处理
            if(o instanceof JSONObject == false) {
                return nullOrException(exception, "key: " + sb.toString() + " 不是ObjectJSON类型而是 " + o.getClass().getName()
                        + " 类型. 对象: " + jsonObject.toJSONString());
            }
            t = (JSONObject) o;
            sb.append('.');
        }
        return t;
    }

    public static JSONArray getJSONArrayByKeys(JSONObject jsonObject, boolean exception, String... keys) {
        int lastIndex = keys.length - 1;
        if(lastIndex < 0) {
            return null;
        } else if(lastIndex == 0) {
            return jsonObject == null ? null : jsonObject.getJSONArray(keys[lastIndex]);
        } else {
            String[] tkeys = new String[lastIndex];
            for(int i = 0;i < lastIndex;i++) {
                tkeys[i] = keys[i];
            }
            JSONObject t = getJSONObjectByKeys(jsonObject, exception, tkeys);
            return t == null ? null : t.getJSONArray(keys[lastIndex]);
        }
    }


    public static JSONObject getJSONObjectByKeys(JSONObject jsonObject, boolean exception, String... keys) {
        if(jsonObject == null) {
            return nullOrException(exception, "jsonObject must not null!");
        }
        JSONObject t = jsonObject;
        Object o;
        StringBuilder sb = new StringBuilder();
        for(String k : keys) {
            o = t.get(k);
            sb.append(k);
            if(o == null) {
                return nullOrException(exception, "找不到对应的key: " + sb.toString() + " 对象: " + jsonObject.toJSONString());
            } else if(o instanceof JSONObject == false) {
                return nullOrException(exception, "key: " + sb.toString() + " 不是ObjectJSON类型而是 " + o.getClass().getName()
                        + " 类型. 对象: " + jsonObject.toJSONString());
            }
            t = (JSONObject) o;
            sb.append('.');
        }
        return t;
    }

}
原文地址:https://www.cnblogs.com/math-and-it/p/14902553.html