fastjson 希望eval()方法能支持反序列操作(下面是我写的两个demo)

pu3pd22g  于 2021-11-27  发布在  Java
关注(0)|答案(0)|浏览(265)
/**
     * 根据path从json中取出结果并反序列成JavaBean
     * @param json json字符串
     * @param path 需要的json路径
     * @param clz class
     * @param <T> 具体类型
     * @return res
     */
    @SuppressWarnings("unchecked")
    public static <T> T eval(String json, String path, Class<T> clz) {
        Object obj = eval(json, path);
        if (obj  == null) {
            return null;
        }
        if (obj instanceof String) {
            if (clz.equals(Long.class)) {
                return (T) Long.valueOf(obj.toString());
            } else if (clz.equals(Integer.class)) {
                return (T) Integer.valueOf(obj.toString());
            } else if (clz.equals(String.class)) {
                return (T) obj.toString();
            } else if (clz.equals(Boolean.class)) {
                return (T) Boolean.valueOf(obj.toString());
            } else if (clz.equals(Double.class)) {
                return (T) Double.valueOf(obj.toString());
            } else if (clz.equals(Float.class)) {
                return (T) Float.valueOf(obj.toString());
            } else {
                throw new IllegalArgumentException("eval error, illegal class type");
            }
        } else if (obj instanceof JSONObject) {
            return JSONObject.parseObject(JSON.toJSONString(obj), clz);
        } else if (obj instanceof JSONArray) {
            throw new IllegalArgumentException("eval error, cannot cast to list");
        }
        return null;
    }

    /**
     * 根据path从json中取出结果并反序列成JavaBean,该方法只支持array
     * @param json json字符串
     * @param path 需要的json路径
     * @param clz class
     * @param <T> 具体类型
     * @return res
     */
    public static <T> List<T> evals(String json, String path, Class<T> clz) {
        Object obj = eval(json, path);
        if (obj  == null) {
            return null;
        }
        if (obj instanceof JSONArray) {
            return JSONArray.parseArray(JSON.toJSONString(obj), clz);
        }
        return null;
    }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题