转自: https://blog.csdn.net/u014676619/article/details/49624165

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.beanutils.BeanUtils; public class JSONUtils {
/**
*
* @author wangwei JSON工具类
* @param
*
*/ /***
* 将List对象序列化为JSON文本
*/
public static <T> String toJSONString(List<T> list) {
JSONArray jsonArray = JSONArray.fromObject(list); return jsonArray.toString();
} /***
* 将对象序列化为JSON文本
*
* @param object
* @return
*/
public static String toJSONString(Object object) {
JSONArray jsonArray = JSONArray.fromObject(object); return jsonArray.toString();
} /***
* 将JSON对象数组序列化为JSON文本
*
* @param jsonArray
* @return
*/
public static String toJSONString(JSONArray jsonArray) {
return jsonArray.toString();
} /***
* 将JSON对象序列化为JSON文本
*
* @param jsonObject
* @return
*/
public static String toJSONString(JSONObject jsonObject) {
return jsonObject.toString();
} /***
* 将对象转换为List对象
*
* @param object
* @return
*/
public static List toArrayList(Object object) {
List arrayList = new ArrayList(); JSONArray jsonArray = JSONArray.fromObject(object); Iterator it = jsonArray.iterator();
while (it.hasNext()) {
JSONObject jsonObject = (JSONObject) it.next(); Iterator keys = jsonObject.keys();
while (keys.hasNext()) {
Object key = keys.next();
Object value = jsonObject.get(key);
arrayList.add(value);
}
} return arrayList;
} /***
* 将对象转换为Collection对象
*
* @param object
* @return
*/
public static Collection toCollection(Object object) {
JSONArray jsonArray = JSONArray.fromObject(object); return JSONArray.toCollection(jsonArray);
} /***
* 将对象转换为JSON对象数组
*
* @param object
* @return
*/
public static JSONArray toJSONArray(Object object) {
return JSONArray.fromObject(object);
} /***
* 将对象转换为JSON对象
*
* @param object
* @return
*/
public static JSONObject toJSONObject(Object object) {
return JSONObject.fromObject(object);
} /***
* 将对象转换为HashMap
*
* @param object
* @return
*/
public static HashMap toHashMap(Object object) {
HashMap<String, Object> data = new HashMap<String, Object>();
JSONObject jsonObject = JSONUtils.toJSONObject(object);
Iterator it = jsonObject.keys();
while (it.hasNext()) {
String key = String.valueOf(it.next());
Object value = jsonObject.get(key);
data.put(key, value);
} return data;
} /***
* 将对象转换为List>
*
* @param object
* @return
*/
// 返回非实体类型(Map)的List
public static List<Map<String, Object>> toList(Object object) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
JSONArray jsonArray = JSONArray.fromObject(object);
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
Map<String, Object> map = new HashMap<String, Object>();
Iterator it = jsonObject.keys();
while (it.hasNext()) {
String key = (String) it.next();
Object value = jsonObject.get(key);
map.put((String) key, value);
}
list.add(map);
}
return list;
} /***
* 将JSON对象数组转换为传入类型的List
*
* @param
* @param jsonArray
* @param objectClass
* @return
*/
public static <T> List<T> toList(JSONArray jsonArray, Class<T> objectClass) {
return JSONArray.toList(jsonArray, objectClass);
} /***
* 将对象转换为传入类型的List
*
* @param
* @param jsonArray
* @param objectClass
* @return
*/
public static <T> List<T> toList(Object object, Class<T> objectClass) {
JSONArray jsonArray = JSONArray.fromObject(object); return JSONArray.toList(jsonArray, objectClass);
} /***
* 将JSON对象转换为传入类型的对象
*
* @param
* @param jsonObject
* @param beanClass
* @return
*/
public static <T> T toBean(JSONObject jsonObject, Class<T> beanClass) {
return (T) JSONObject.toBean(jsonObject, beanClass);
} /***
* 将将对象转换为传入类型的对象
*
* @param
* @param object
* @param beanClass
* @return
*/
public static <T> T toBean(Object object, Class<T> beanClass) {
JSONObject jsonObject = JSONObject.fromObject(object); return (T) JSONObject.toBean(jsonObject, beanClass);
} /***
* 将JSON文本反序列化为主从关系的实体
*
* @param 泛型T
* 代表主实体类型
* @param 泛型D
* 代表从实体类型
* @param jsonString
* JSON文本
* @param mainClass
* 主实体类型
* @param detailName
* 从实体类在主实体类中的属性名称
* @param detailClass
* 从实体类型
* @return
*/
public static <T, D> T toBean(String jsonString, Class<T> mainClass,
String detailName, Class<D> detailClass) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
JSONArray jsonArray = (JSONArray) jsonObject.get(detailName); T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
List<D> detailList = JSONUtils.toList(jsonArray, detailClass); try {
BeanUtils.setProperty(mainEntity, detailName, detailList);
} catch (Exception ex) {
throw new RuntimeException("主从关系JSON反序列化实体失败!");
} return mainEntity;
} /***
* 将JSON文本反序列化为主从关系的实体
*
* @param 泛型T
* 代表主实体类型
* @param 泛型D1
* 代表从实体类型
* @param 泛型D2
* 代表从实体类型
* @param jsonString
* JSON文本
* @param mainClass
* 主实体类型
* @param detailName1
* 从实体类在主实体类中的属性
* @param detailClass1
* 从实体类型
* @param detailName2
* 从实体类在主实体类中的属性
* @param detailClass2
* 从实体类型
* @return
*/
public static <T, D1, D2> T toBean(String jsonString, Class<T> mainClass,
String detailName1, Class<D1> detailClass1, String detailName2,
Class<D2> detailClass2) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2); T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2); try {
BeanUtils.setProperty(mainEntity, detailName1, detailList1);
BeanUtils.setProperty(mainEntity, detailName2, detailList2);
} catch (Exception ex) {
throw new RuntimeException("主从关系JSON反序列化实体失败!");
} return mainEntity;
} /***
* 将JSON文本反序列化为主从关系的实体
*
* @param 泛型T
* 代表主实体类型
* @param 泛型D1
* 代表从实体类型
* @param 泛型D2
* 代表从实体类型
* @param jsonString
* JSON文本
* @param mainClass
* 主实体类型
* @param detailName1
* 从实体类在主实体类中的属性
* @param detailClass1
* 从实体类型
* @param detailName2
* 从实体类在主实体类中的属性
* @param detailClass2
* 从实体类型
* @param detailName3
* 从实体类在主实体类中的属性
* @param detailClass3
* 从实体类型
* @return
*/
public static <T, D1, D2, D3> T toBean(String jsonString,
Class<T> mainClass, String detailName1, Class<D1> detailClass1,
String detailName2, Class<D2> detailClass2, String detailName3,
Class<D3> detailClass3) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1);
JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2);
JSONArray jsonArray3 = (JSONArray) jsonObject.get(detailName3); T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1);
List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2);
List<D3> detailList3 = JSONUtils.toList(jsonArray3, detailClass3); try {
BeanUtils.setProperty(mainEntity, detailName1, detailList1);
BeanUtils.setProperty(mainEntity, detailName2, detailList2);
BeanUtils.setProperty(mainEntity, detailName3, detailList3);
} catch (Exception ex) {
throw new RuntimeException("主从关系JSON反序列化实体失败!");
} return mainEntity;
} /***
* 将JSON文本反序列化为主从关系的实体
*
* @param 主实体类型
* @param jsonString
* JSON文本
* @param mainClass
* 主实体类型
* @param detailClass
* 存放了多个从实体在主实体中属性名称和类型
* @return
*/
public static <T> T toBean(String jsonString, Class<T> mainClass,
HashMap<String, Class> detailClass) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
T mainEntity = JSONUtils.toBean(jsonObject, mainClass);
for (Object key : detailClass.keySet()) {
try {
Class value = (Class) detailClass.get(key);
BeanUtils.setProperty(mainEntity, key.toString(), value);
} catch (Exception ex) {
throw new RuntimeException("主从关系JSON反序列化实体失败!");
}
}
return mainEntity;
} /**
* jsonStr转List
*
* @param jsonStr
* @return
*/
public static List<Map<String, Object>> parseJSON2List(String jsonStr) {
JSONArray jsonArr = JSONArray.fromObject(jsonStr);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = jsonArr.iterator();
while (it.hasNext()) {
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
return list;
} /**
* jsonStr转Map
*
* @param jsonStr
* @return
*/
public static Map<String, Object> parseJSON2Map(String jsonStr) {
Map<String, Object> map = new HashMap<String, Object>();
// 最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for (Object k : json.keySet()) {
Object v = json.get(k);
// 如果内层还是数组的话,继续解析
if (v instanceof JSONArray) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Iterator<JSONObject> it = ((JSONArray) v).iterator();
while (it.hasNext()) {
JSONObject json2 = it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
} /**
* url转List
*
* @param url
* @return
*/
public static List<Map<String, Object>> getListByUrl(String url) {
try {
// 通过HTTP获取JSON数据
InputStream in = new URL(url).openStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return parseJSON2List(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* url转Map
*
* @param url
* @return
*/
public static Map<String, Object> getMapByUrl(String url) {
try {
// 通过HTTP获取JSON数据
InputStream in = new URL(url).openStream();
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return parseJSON2Map(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

强大的Java Json工具类的更多相关文章

  1. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  2. Json工具类 - JsonUtils.java

    Json工具类,提供Json与对象之间的转换. 源码如下:(点击下载 - JsonUtils.java . gson-2.2.4.jar ) import java.lang.reflect.Type ...

  3. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  4. Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加

    package com.aherp.framework.util; import java.lang.reflect.Array;import java.lang.reflect.Method;imp ...

  5. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  6. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

  7. java日期工具类DateUtil-续二

    该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...

  8. 25.大白话说java并发工具类-CountDownLatch,CyclicBarrier,Semaphore,Exchanger

    1. 倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join ...

  9. HttpClientUntils工具类的使用测试及注意事项(包括我改进的工具类和Controller端的注意事项【附 Json 工具类】)

    HttpClient工具类(我改过): package com.taotao.httpclient; import java.io.IOException; import java.net.URI; ...

随机推荐

  1. sql一些语句性能及开销优化

    1.应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分开的操作尽量分开处理,提高每次的响应速度:在数据窗口使用 ...

  2. English trip -- Phonics 1 ar

    Xu言: Learning is not a happy thing, but happiness always comes with learning...    - loki.valentine ...

  3. 【模板/经典题型】带有直线限制的NE Latice Path计数

    平移一下,变成不能接触y=x+1. 注意下面的操作(重点) 做点p=(n,m)关于这条直线的对称点q=(m-1,n+1). ans=f(p)-f(q). 其中f(x)为从(0,0)到点x的方案数.

  4. php实现频率限制

    一.前言 公司要做呼叫中心,呼叫中心为了防止骚扰,需要限制用户拨打电话的频率,比如30s只能点击一次.这样的需求是通过redis来实现的. 二.具体实现 <?php class Resource ...

  5. Thrift0.11.0基于Intellij IDEA的简单的例子

    前言 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然 ...

  6. python-day9-集合数据类型

    pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']linuxs=['wupeiqi','oldboy','gangdan'] ...

  7. nyoj-310-河南省第四届省赛题目-二分+dinic

    SECRET 时间限制:3000 ms  |  内存限制:65535 KB 难度:6   描述 Dr.Kong is constructing a new machine and wishes to ...

  8. 从0开始接触html--第一天学习内容总结

    第一天 总结: h1-h6 p 段落 hr br 有序 ol li 无序 ul li 定义列表 dl dt dd 块级元素:独占一行,h1-h6 p hr div 行内元素:共占一行, em和i st ...

  9. 页面跳转 Server.Transfer和 Response.Redirect的区别

    1.Server.Transfer 用于把处理的控制权从一个页面转移到另一个页面,在转移的工程中没有离开服务器内部控件(如request,session等)保存的信息不变.因此你能从a页面跳转到b页面 ...

  10. Oracle to_char()和to_date()函数的用法

    to_char()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法 1.to_char()函数分析 1)SQL中不区分大小写,MM和mm被认为是相同的格式代码 先 ...