zoukankan      html  css  js  c++  java
  • 基于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;
        }
    
    }
  • 相关阅读:
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    软工作业1
    总结
    2013-2014 ACM ICPC Central European Regional Contest (CERC 13) K-Digraphs
    2018CCPC吉林赛区 F
    计蒜客-A1594 封印之门
    HDU-1599 find the mincost route
    POJ-2240 Arbitrage
  • 原文地址:https://www.cnblogs.com/math-and-it/p/14902553.html
Copyright © 2011-2022 走看看