json 解析与生成工具类 ,JSON操作讲解(附件)

soゝso 2016-08-22 18:29:43 9373

package Sojson;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
  
/**
 * 
 * 开发公司:itboy.net<br/>
 * 版权:itboy.net<br/>
 * <p>
 * 
 * JSON工具类
 * 
 * <p>
 * 
 * 区分 责任人 日期    说明<br/>
 * 创建 周柏成 2015年12月25日  <br/>
 * <p>
 * *******
 * <p>
 * @author zhou-baicheng
 * @email  i@itboy.net
 * @version 1.0,2015年12月25日 <br/>
 * 
 */
public class JSONUtils {  
    /** 
     * 格式化日期 
     */  
    private static final SimpleDateFormat FMT = new SimpleDateFormat(  
            "yyyy-MM-dd");  
    private Map<String, Object> jsonMap = new HashMap<String, Object>();  
  
    /** 
     * 清理map 
     * @author zhou-baicheng 
     */  
    public void clear() {  
        jsonMap.clear();  
    }  
  
    /** 
     * 添加元素 <br/> 
     * @author zhou-baicheng 
     * @param key 键 
     * @param value 值 
     * @return Map 
     */  
    public Map<String, Object> put(String key, Object value) {  
        jsonMap.put(key, value);  
        return jsonMap;  
    }  
  
    /** 
     * 判断是否要加引号 
     * return (value instanceof Integer || value instanceof Boolean 
     * || value instanceof Double || value instanceof Float 
     * || value instanceof Short || value instanceof Long || value 
     * instanceof Byte); 
     * @author zhou-baicheng 
     * @param value 
     * @return boolean 
     */  
    private static boolean isNoQuote(Object value) {  
        if (value instanceof Integer) {  
            return true;  
        } else if (value instanceof Boolean) {  
            return true;  
        } else if (value instanceof Double) {  
            return true;  
        } else if (value instanceof Float) {  
            return true;  
        } else if (value instanceof Short) {  
            return true;  
        } else if (value instanceof Long) {  
            return true;  
        } else if (value instanceof Byte) {  
            return true;  
        } else {  
            return false;  
        }  
    }  
  
    /** 
     * 判断是否要加引号 
     * @author zhou-baicheng 
     * @param value 
     * @return boolean 
     */  
    private static boolean isQuote(Object value) {  
        if (value instanceof String) {  
            return true;  
        } else if (value instanceof Character) {  
            return true;  
        } else {  
            return false;  
        }  
  
    }  
  
    /** 
     * 返回形如{'apple':'red','lemon':'yellow'}的字符串 
     * @author zhou-baicheng 
     * @return String 
     * @see java.lang.Object#toString() 
     */  
    @SuppressWarnings("unchecked")  
    @Override  
    public String toString() {  
        StringBuffer sb = new StringBuffer();  
        sb.append("{");  
        Set<Entry<String, Object>> set = jsonMap.entrySet();  
        for (Entry<String, Object> entry : set) {  
            Object value = entry.getValue();  
            if (value == null) {  
                continue;// 对于null值,不进行处理,页面上的js取不到值时也是null  
            }  
            sb.append("'").append(entry.getKey()).append("':");  
            if (value instanceof JSONUtils) {  
                sb.append(value.toString());  
            } else if (isNoQuote(value)) {  
                sb.append(value);  
            } else if (value instanceof Date) {  
                sb.append("'").append(FMT.format(value)).append("'");  
            } else if (isQuote(value)) {  
                sb.append("'").append(value).append("'");  
            } else if (value.getClass().isArray()) {  
                sb.append(arrayToStr(value));  
            } else if (value instanceof Map) {  
                sb.append(fromObject((Map<String, Object>) value).toString());  
            } else if (value instanceof List) {  
                sb.append(listToStr((List<Object>) value));  
            } else {  
                sb.append(fromObject(value).toString());  
            }  
            sb.append(",");  
        }  
        int len = sb.length();  
        if (len > 1) {  
            sb.delete(len - 1, len);  
        }  
        sb.append("}");  
        return sb.toString();  
    }  
  
    /** 
     * 数组拼接 
     * @author zhou-baicheng 
     * @param array 数组 
     * @return String 
     */  
    public static String arrayToStr(Object array) {  
        if (!array.getClass().isArray()) {  
            return "[]";  
        }  
        StringBuffer sb = new StringBuffer();  
        sb.append("[");  
        int len = Array.getLength(array);  
        Object v = null;  
        for (int i = 0; i < len; i++) {  
            v = Array.get(array, i);  
            if (v instanceof Date) {  
                sb.append("'").append(FMT.format(v)).append("'").append(",");  
            } else if (isQuote(v)) {  
                sb.append("'").append(v).append("'").append(",");  
            } else if (isNoQuote(v)) {  
                sb.append(i).append(",");  
            } else {  
                sb.append(fromObject(v)).append(",");  
            }  
        }  
        len = sb.length();  
        if (len > 1) {  
            sb.delete(len - 1, len);  
        }  
        sb.append("]");  
        return sb.toString();  
    }  
  
    /** 
     * list 集合 生成 
     * @author zhou-baicheng 
     * @param list 集合 
     * @return String 
     */  
    @SuppressWarnings("unchecked")  
    public static String listToStr(List<Object> list) {  
        if (list == null) {  
            return null;  
        }  
        StringBuffer sb = new StringBuffer();  
        sb.append("[");  
        Object value = null;  
        for (java.util.Iterator<Object> it = list.iterator(); it.hasNext();) {  
            value = it.next();  
            if (value instanceof Map) {  
                sb.append(fromObject((Map) value).toString()).append(",");  
            } else if (isNoQuote(value)) {  
                sb.append(value).append(",");  
            } else if (isQuote(value)) {  
                sb.append("'").append(value).append("'").append(",");  
            } else {  
                sb.append(fromObject(value).toString()).append(",");  
            }  
        }  
        int len = sb.length();  
        if (len > 1) {  
            sb.delete(len - 1, len);  
        }  
        sb.append("]");  
        return sb.toString();  
    }  
  
    /** 
     * 从一个bean装载数据,返回一个JsonUtil对象。 <br/> 
     * @author zhou-baicheng 
     * @param bean 实体 
     * @return JSONUtils 
     */  
    @SuppressWarnings("unchecked")  
    public static JSONUtils fromObject(Object bean) {  
        JSONUtils json = new JSONUtils();  
        if (bean == null) {  
            return json;  
        }  
        Class cls = bean.getClass();  
        Field[] fs = cls.getDeclaredFields();  
        Object value = null;  
        String fieldName = null;  
        Method method = null;  
        int len = fs.length;  
        for (int i = 0; i < len; i++) {  
            fieldName = fs[i].getName();  
            try {  
                method = cls.getMethod(getGetter(fieldName), (Class[]) null);  
                value = method.invoke(bean, (Object[]) null);  
            } catch (Exception e) {  
                e.printStackTrace();  
                continue;  
            }  
            json.put(fieldName, value);  
        }  
        return json;  
    }  
  
    /** 
     * 从Map中装载数据 <br/> 
     * @author zhou-baicheng 
     * @param map map 
     * @return JSONUtils 
     */  
    public static JSONUtils fromObject(Map<String, Object> map) {  
        JSONUtils json = new JSONUtils();  
        if (map == null) {  
            return json;  
        }  
        json.getMap().putAll(map);  
        return json;  
    }  
  
    private static String getGetter(String property) {  
        return "get" + property.substring(0, 1).toUpperCase()  
                + property.substring(1, property.length());  
    }  
  
    public Map<String, Object> getMap() {  
        return this.jsonMap;  
    }  
  
    /** 
     * 此处为方法说明 
     * @author zhou-baicheng 
     * @param args aa 
     */  
    public static void main(String[] args) { 
        Map<String,Object> map1 = new HashMap<String,Object>(); 
        map1.put("name", "张三"); 
        map1.put("age", 2); 
        Map<String,Object> map2 = new HashMap<String,Object>(); 
        map2.put("name", "张三"); 
        map2.put("age", 22); 
        List<Map<String,Object>> list = new LinkedList<Map<String,Object>>(); 
        list.add(map1); 
        list.add(map2); 
        List<Integer> li = new LinkedList<Integer>(); 
        li.add(1); 
        li.add(1); 
        li.add(1); 
        System.out.println(JSONUtils.fromObject(map1)); 
        JSONUtils util = new JSONUtils(); 
        util.put("name", "张三"); 
        util.put("blog", "https://www.sojson.com/blog/"); 
        util.put("ttt", true); 
        util.put("dd", 1.3d); 
        util.put("ff", 1.3f); 
        util.put("date", new java.util.Date()); 
        int[] a = new int[] { 2, 3, 4, 5 }; 
        util.put("arr", a); 
        System.out.println(util); 
    }
  
}


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/32.html

转载时必须以链接形式注明原始出处及本声明。


附件下载:

备注:点击文件名下载,附件源来自云端,只能在本站下载。复制下载链接无效。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
JSON格式讲解JSON获取对象,JSONObject和JSONArray的操作
Java 解析JSONJSON-LIB jar包下载和使用。
Java Cookie 操作工具
Java 完美解析.plist & 生成plist ,Android 解析.plist
JSON.stringify 函数 (JavaScript)讲解
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析
JQuery Ajax四种写法,Ajax请求返回JSON 操作Demo
Java 解析二维码,google.ZXing 讲解
谈谈这次对 SOJSON 的改版
GZIP压缩JSONJSON压缩
最新文章
当我谈 HTTP 时,我谈些什么? 844
新浪短链(t.cn)最新申请官方API的方法讲解。 5196
QUIC / HTTP3 协议详细分析讲解 1492
恭喜那个做云存储的七牛云完成 F 轮 10 亿人民币的融资,开启新的云旅程 2257
Autojs怎么安全加密?Autojs在线加密工具注意事项。 3736
Java JSON 组件选型之 FastJson 为什么总有漏洞? 11767
使用七牛云存储实现图片API,自动删除图片方案合集 3000
神速ICP备案经验分享,ICP备案居然一天就通过了 4206
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 4319
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 5505
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 477060
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 437273
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 373920
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 369729
免费天气API,天气JSON API,不限次数获取十五天的天气预报 334938
Elasticsearch教程(四) elasticsearch head 插件安装和使用 245561
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 213651
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 151039
Elasticsearch教程(一),全程直播(小白级别) 129968
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 112207
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...