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

soゝso 2016-08-22 18:29:43 1802
分享到:

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", "http://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); 
    }
  
}


关于作者
目前就职于国内某电商平台公司打杂。。
相关文章
Java 解析JSONJSON-LIB jar包下载和使用。
JSON格式讲解JSON获取对象,JSONObject和JSONArray的操作
Java Cookie 操作工具
JQuery Ajax四种写法,Ajax请求返回JSON 操作Demo
Java 解析二维码,google.ZXing 讲解
cpu资源采集.json
JSON.stringify 函数 (JavaScript)讲解
city.json
JSOUP 教程,JSOUP请求JSON ,JSOUP返回JSON 数据
Java 发送Email,Java 邮件发送工具封装
最新文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39212
SOJSON 使用又拍云 CDN 整体架构,解决百度 SEO 方案 33
又拍云(Upyun)刷新CDN,云存储缓存 —JavaAPI 20
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解 87
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析 45
百度秒收录教程,怎么做到百度秒收入你的页面,SEO 教程 102
CDN 请求返回 connection reset by peer,被拦截请求解决方案 37
Google AdSense 申请技巧,谷歌广告申请通不过教程 75
Mac 安装 JMeter,JMeter 下载,JMeter Http 压力测试【图解】 51
Java 随机从 List 随机获取多个不重复对象,Mysql 随机10条数据 75
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39214
Elasticsearch教程(四) elasticsearch head 插件安装和使用 109192
Elasticsearch教程(六) elasticsearch Client创建 73333
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 70770
Elasticsearch教程(二),IK分词器安装 67527
Elasticsearch教程(三),IK分词器安装 (极速版) 54098
Elasticsearch教程(五) elasticsearch Mapping的创建 51659
Elasticsearch教程(一),全程直播(小白级别) 51448
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 47798
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 40972

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

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

正在加载... ...