import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class JsonUtil {
/**
* 对象转换成JSON字符串
*
* @param obj
* 需要转换的对象
* @return 对象的string字符
*/
public static String objToJson(Object obj) {
JSONObject jSONObject = JSONObject.fromObject(obj);
return jSONObject.toString();
} /**
* JSON字符串转换成对象
*
* @param jsonString
* 需要转换的字符串
* @param type
* 需要转换的对象类型
* @return 对象
*/
public static <T> T jsonToBean(String jsonString, Class<T> type) {
JSONObject jsonObject = JSONObject.fromObject(jsonString);
return jsonToBean(jsonObject, type);
} /**
* jsonObject 转换为javabean
*
* @param jsonObject
* @param type
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T jsonToBean(JSONObject jsonObject, Class<T> type) {
return (T) JSONObject.toBean(jsonObject, type);
} /**
* json 转换为 beanList
*
* @param jsonArray
* @param type
* @return
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List jsonToBeanList(JSONArray jsonArray, Class type) {
List<Object> list = new ArrayList<Object>();
for (Object obj : jsonArray) {
if (obj instanceof JSONArray) {
list.add(jsonToBeanList((JSONArray) obj, type));
} else if (obj instanceof JSONObject) {
list.add(jsonToBean((JSONObject) obj, type));
} else {
list.add(obj);
}
}
return list;
} /**
* 将JSONArray对象转换成list集合
*
* @param jsonArr
* @return
*/
public static List<Object> jsonToMapList(JSONArray jsonArr) {
List<Object> list = new ArrayList<Object>();
for (Object obj : jsonArr) {
if (obj instanceof JSONArray) {
list.add(jsonToMapList((JSONArray) obj));
} else if (obj instanceof JSONObject) {
list.add(jsonToMap((JSONObject) obj));
} else {
list.add(obj);
}
}
return list;
} /**
* 将json字符串转换成map对象
*
* @param json
* @return
*/
public static Map<String, Object> jsonToMap(String json) {
JSONObject obj = JSONObject.fromObject(json);
return jsonToMap(obj);
} /**
* 将JSONObject转换成map对象
*
* @param json
* @return
*/
public static Map<String, Object> jsonToMap(JSONObject obj) {
Set<?> set = obj.keySet();
Map<String, Object> map = new HashMap<String, Object>(set.size());
for (Object key : obj.keySet()) {
Object value = obj.get(key);
if (value instanceof JSONArray) {
map.put(key.toString(), jsonToMapList((JSONArray) value));
} else if (value instanceof JSONObject) {
map.put(key.toString(), jsonToMap((JSONObject) value));
} else {
map.put(key.toString(), obj.get(key));
}
}
return map;
}
}

Java-JsonUtil工具类的更多相关文章

  1. Java Properties工具类详解

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

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

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

  3. Java日期工具类,Java时间工具类,Java时间格式化

    Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...

  4. Java并发工具类 - CountDownLatch

    Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...

  5. MinerUtil.java 爬虫工具类

    MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...

  6. MinerDB.java 数据库工具类

    MinerDB.java 数据库工具类 package com.iteye.injavawetrust.miner; import java.sql.Connection; import java.s ...

  7. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  8. Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie

    Java Cookie工具类,Java CookieUtils 工具类,Java如何增加Cookie >>>>>>>>>>>>& ...

  9. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  10. java日期工具类DateUtil-续一

    上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...

随机推荐

  1. 【转帖】Istio是啥?一文带你彻底了解!

    Istio是啥?一文带你彻底了解! http://www.sohu.com/a/270131876_463994 原始位置来源: https://cizixs.com 如果你比较关注新兴技术的话,那么 ...

  2. 百度后端C++电话一面

    Json.XML差异?说全点,能想到的所有差异.然后protobuf不小心被我提出来了,开始扯三个的差异....然后问优缺点.服务端客户端使用及接口更新的影响范围如何缩小 左值,右值区别 map用什么 ...

  3. Codeforces 1238F. The Maximum Subtree

    传送门 考虑构造一些区间使得树尽可能的 "大" 发现这棵树最多就是一条链加上链上出去的其他边连接的点 构造的区间大概长这样(图比较丑请谅解..$qwq$,图中每一个 "└ ...

  4. And Reachability CodeForces - 1169E (有向图可达性)

    大意: 给定序列$a$, 对所有的a[i]&a[j]>0, 从$i$向$j$连一条有向边, 给出$m$个询问$(x,y)$, 求是否能从$x$到达$y$. 裸的有向图可达性, 有向图可达 ...

  5. 怎样使用 v-html 指令?

    v-html 可以在目标节点位置内部插入 html 子节点, 跟节点的 .innerHTML 属性类似, 使用方法如下: <!DOCTYPE html> <html lang=&qu ...

  6. thymeleaf 模板使用 之 前台界面获取后台属性值

    使用Thymeleaf模板时,如果需要在js中获取后台传值,那么需要用内联JS写法获取 [姿势很重要] 一.后台通过Model的addAttribute方法向前台传值 1.js获取后台属性值(--内联 ...

  7. javascript——定义函数方式

    1:有名函数定义方式 2:匿名函数定义方法 https://www.cnblogs.com/wl0000-03/p/6050108.html console.log(add(3,6)); (funct ...

  8. linq to xml运用示例

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  9. ReadWriteLock读写之间互斥吗

    开发中遇到并发的问题一般会用到锁,Synchronized存在明显的一个性能问题就是读与读之间互斥:ReadWriteLock是JDK5中提供的读写分离锁.读写分离锁可以有效地帮助减少锁竞争,以提升系 ...

  10. python之uWSGI和WSGI

    WSGI协议 首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...