JsonUtil

简介: package com.css.common.util; import java.lang.reflect.Type; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.L

package com.css.common.util;

import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

/**
 * 用于JSON格式读写操作的工具类
 *
 * @version 1.0
 *
 */
public class JsonUtil {

 private static GsonBuilder gbuilder = new GsonBuilder().disableHtmlEscaping();// 不转义html标记
 private static Gson gson = gbuilder.setDateFormat("yyyy-MM-dd HH:mm:ss").create();// 格式时间
 private static JsonParser jsonParser = new JsonParser();// JSON解析器

 /**
  * 转换json串为bean对象
  *
  * @param jsonStr
  *            指定JSON字符串
  * @param beanClazz
  *            指定转换类
  * @return
  */
 public static Object deserializeToBean(String jsonStr, Class beanClazz) {
  return gson.fromJson(transJsonTime(jsonStr), beanClazz);
 }

 /**
  * 转换json串为bean对象
  *
  * @param jsonStr
  *            指定JSON字符串
  * @param type
  *            指定转换类型 java.lang.reflect.Type
  * @return
  */
 public static Object deserializeToBean(String jsonStr, Type type) {
  return gson.fromJson(transJsonTime(jsonStr), type);
 }

 /**
  * 转换类型为String的json串为beanList
  *
  * @param jsonStr
  *            指定JSON字符串
  * @param type
  *            指定转换类型 java.lang.reflect.Type
  * @return
  */
 public static List deserializeToBeanList(String jsonStr, Type type) {
  // return JSONArray.toList(JSONArray.fromObject(jsonStr),beanClazz);
  return gson.fromJson(transJsonTime(jsonStr), type);
 }

 /**
  * 转换类型为obj的json对象为list
  *
  * @param bean
  *            指定JavaBean java.lang.Object
  * @param type
  *            指定转换类型 java.lang.reflect.Type
  * @return
  */
 public static List deserializeObjToBeanList(Object bean, Type type) {
  // return JSONArray.toList(JSONArray.fromObject(obj),beanClazz);
  return gson.fromJson(transJsonTime(bean.toString()), type);
 }

 /**
  * 转换bean为json串
  *
  * @param bean
  *            指定JavaBean java.lang.Object
  * @param type
  *            指定转换类型 java.lang.reflect.Type
  * @return
  */
 public static String serializeFromBean(Object bean, Type type) {
  return gson.toJson(bean, type);
 }

 /**
  * 转换bean为json串
  *
  * @param 指定JavaBean
  *            java.lang.Object
  * @return
  */
 public static String serializeFromBean(Object bean) {
  // return JSONObject.fromObject(bean).toString();
  return gson.toJson(bean);
 }

 /**
  * 转换beanList为json串
  *
  * @param beanList
  *            指定JavaBean的List集合
  * @param type
  *            指定转换类型 java.lang.reflect.Type
  * @return
  */
 public static String serializeFromBeanList(List beanList, Type type) {
  return gson.toJson(beanList);
 }

 /**
  * 转换beanList为json串
  *
  * @param beanList
  *            指定JavaBean的List集合
  * @return
  */
 public static String serializeFromBeanList(List beanList) {
  return gson.toJson(beanList);
 }

 /**
  * 转换json date为"yyyy-MM-dd HH:mm:ss"
  *
  * @param str
  *            指定JSON字符串,带Long数字型数据
  * @return
  */
 public static String transJsonTime(String str) {
  String regex = "\\\"createDt\\\":\\{([^\\{\\}:]+?:[^\\{\\}]+?){9}\\}";
  long begin = System.currentTimeMillis();
  Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);// 忽略大小写
  Matcher matcher = pattern.matcher(str);
  if (matcher.find()) {
   str = matcher.replaceFirst(replaceJsonDateFormat(matcher.group()));
   str = transJsonTime(str);
  }
  return str;
 }

 private static String replaceJsonDateFormat(String jsonStr) {
  int position = jsonStr.indexOf(":{") + 1;
  String prefix = jsonStr.substring(0, position);
  Map<String, String> map = (HashMap) JsonUtil.deserializeToBean(
    jsonStr.substring(position),
    new TypeToken<HashMap<String, String>>() {}.getType());
  // Date Set
  Date d = new Date(Long.valueOf(map.get("time")));
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  return prefix + "\"" + df.format(d) + "\"";
 }

 private static JsonElement getJsonElement(String jsonStr) {
  return jsonParser.parse(jsonStr);
 }

 private static JsonObject getJsonObject(String jsonStr) {
  JsonObject jo = null;
  JsonElement ele = getJsonElement(jsonStr);
  if (ele.isJsonObject()) {
   jo = ele.getAsJsonObject();
  }
  return jo;
 }
 
 /**
  * 得到对象的数值(JsonObject)
  * @param jsonStr 指定的JSON字符串
  * @param key 指定的Key
  * @return
  */
 public static Object getObject(String jsonStr, String key) {
  JsonObject jo = getJsonObject(jsonStr);
  if (jo.isJsonNull()||jo==null) {
   return null;
  } else {
   return jo.get(key);
  }
 }

 /**
  * 得到对象的数值(JsonObject)
  * @param jsonStr 指定的JSON字符串
  * @param key 指定的Key
  * @return
  */
 public static String getValue(String jsonStr, String key) {
  Object obj = getObject(jsonStr,key);
  String str = String.valueOf(obj==null?"":obj);
  if(str!=null&&!"".equals(str)){
   if(str.indexOf("\"")==0){
    str = str.substring(1,str.length());       //去掉开头一个"  
   }
   if(str.lastIndexOf("\"")==(str.length()-1)){
    str = str.substring(0,str.length()-1);     //去掉最后一个"
   }
  }
  return str;
 }

 /**
  * 得到对象的集合(JsonArray)
  * @param jsonStr 指定的JSON字符串
  * @param key 指定的Key
  * @return
  */
 public static List getList(String jsonStr, String key) {
  jsonStr = getValue(jsonStr,key);
  if(jsonStr==null || "".equals(jsonStr)){
   return null;
  }else{
   return getList(jsonStr);
  }
 }
 
 /**
  * 得到对象的集合(JsonArray)
  * @param jsonStr 指定的JSON字符串
  * @return
  */
 public static List getList(String jsonStr) {
  List list = null;
  JsonElement je = getJsonElement(jsonStr);
  if (je!=null && je.isJsonArray()) {
   JsonArray ja = je.getAsJsonArray();
   if(ja.size()>0){
    list = new ArrayList<JsonElement>();
    for (int i = 0; i < ja.size(); i++) {
     list.add(ja.get(i));
    }
   }
   ja = null;
  }
  return list;
 }

 public static void main(String[] args) throws Exception {

//  String jsonStr = "{\"id\":222,\"gname\":\"1243124\"},\"items\":{[\"id\":33,\"name\":\"cailiang33\"],[\"id\":22,\"name\":\"cailiang22\"]}";
//  String jsonStr = "{id:222,gname:\"1243124\",items:{[id:33,name:\"cailiang33\"],[id:22,name:\"cailiang22\"]}";
  String jsonStr = "{id:222,gname:\"1243124\"}";
  
  System.out.println(getObject(jsonStr, "gname"));
 }
}

目录
相关文章
|
Cloud Native 数据可视化 架构师
一文看懂蚂蚁BizStack 云原生开发和治理平台
在数字化转型大背景下,企业如何解决业务敏捷交付、科技持续治理难题?
1341 1
一文看懂蚂蚁BizStack 云原生开发和治理平台
|
存储 SQL JSON
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
1709 0
【ELK】(四)Elasticsearch 聚合查询与多维度数据统计
|
Web App开发 网络安全
SSL接收到一个超出最大准许长度的记录 错误处理
SSL接收到一个超出最大准许长度的记录 错误处理
8051 0
SSL接收到一个超出最大准许长度的记录 错误处理
|
Docker Python 容器
解决ModuleNotFoundError: No module named ‘distutils.util‘
解决ModuleNotFoundError: No module named ‘distutils.util‘
934 0
|
JSON JavaScript fastjson
深入探索FastJSON:高效的JSON处理工具
在现代的应用开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。FastJSON作为一款高性能的JSON处理工具,在Java应用中得到了广泛的应用。本文将深入探讨FastJSON的基本概念、特点,以及如何在实际应用中使用它进行高效的JSON数据处理。
564 0
|
JSON Kubernetes Cloud Native
美女同事的烦恼:如何配置 Apache SkyWalking 告警?
技术部基本上是一个和尚庙,女生非常少,即使有女生也略微有点抽象,小婉就不一样,她气质绝佳。 上午,同事小婉刚才从老板办公室里出来,看上去一脸不悦的样子。为了表示对同事的关(ba)心(gua),我就主动和她聊一聊。
352 0
美女同事的烦恼:如何配置 Apache SkyWalking 告警?
|
Java jvm-sandbox 开发者
【alibaba/jvm-sandbox#03】JavaAgent 修改字节码的机制
开发者一般采用建立一个 Agent 的方式来使用 JVMTI,使用 JVMTI 一个基本的方式就是设置回调函数,在回调函数体内,可以 获取各种各样的VM级信息,甚至控制VM行为,如类加载时修改类
403 0
|
存储 安全 前端开发
手把手教你用Java实现一套简单的鉴权服务(SpringBoot,SSM)(万字长文2)
手把手教你用Java实现一套简单的鉴权服务(SpringBoot,SSM)(万字长文)
手把手教你用Java实现一套简单的鉴权服务(SpringBoot,SSM)(万字长文2)
|
设计模式 前端开发 测试技术
ant-design-pro 开箱即用的中台前端/设计解决方案
ant-design-pro 开箱即用的中台前端/设计解决方案
344 0
ant-design-pro 开箱即用的中台前端/设计解决方案
|
存储 NoSQL Java
java基于Token+Redis的单点登录解决方案
本文介绍常用的三种中推荐使用的java基于Token+Redis的单点登录解决方案。
2051 0
java基于Token+Redis的单点登录解决方案