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.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"));
 }
}

时间: 2024-11-03 22:55:21

JsonUtil的相关文章

android是如何接受web数据的呀

问题描述 android是如何接受web数据的呀 最近在做一个项目,要求android从sqlserver数据库接受数据.已经成功把数据发布到网上,从网上找到相关代码,也能稍微理解一下,但是为什么就是接受不起来呢 不明白到底具体android是如何接受web数据的 下面是代码 package com.example.test2; import android.app.Activity; import android.os.Bundle; import org.json.JSONArray; im

JS对象序列化为JSON对象

JS对象序列化为JSON对象,如下代码: /**    * JSON 解析类    * 方法:    * 将JSON字符串解码为页面可识别的object对象    * @param {String} json The JSON string    * @return {Object} The resulting object     * Object o = JSONUtil.decode(json);    *     * 将JS对象序列化为JSON字符串    * @param {Mixed

如何将DataSet转换成josn并输出

 如何将DataSet转换成josn并输出,这是很多新手朋友们遇到的问题,下面有个不错的示例,希望对大家有所帮助 代码如下: public class JsonUtil  {  public string ToJson(DataSet dataSet)  {  string jsonString = "{";  foreach (DataTable table in dataSet.Tables)  {  jsonString += """" +

android wheelview实现三级城市选择

很早之前看淘宝就有了ios那种的城市选择控件,当时也看到网友有分享,不过那个写的很烂,后来(大概是去年吧),我们公司有这么一个项目,当时用的还是网上比较流行的那个黑框的那个,感觉特别的丑,然后我在那个开源的wheelview的基础上做封装,用户只需要专心数据的组装即可,然后填充就行,其他的可以不必考虑. 先上下效果图 接下来说下我的思路:网络请求-数据返回-设置数据-数据填充控件 接下来直接按上面的流程直接上代码: 网络请求我用的本地的json数据 String address = Utils.

struts json序列化遇上replaceAll就出问题

是用struts 的json插件进行序列化  代码如下: Java代码   @Test       public void test_json() throws JSONException {           Map<String, String> map = new HashMap<String, String>();           map.put("name", "whua\"ng");           Strin

在java项目中的mongodb的_id被fastjson转为json时竟然丢失了

fastjson是阿里开发的一个javaBean和json解析器和封装器(源码位置),用过几次感觉挺好用的,也是国人的开源项目当然得支持,但最近项目在使用mongodb作为数据库时出现了_id丢失的问题,现将我遇到的问题和解决办法展示一下. 现将错误的程序代码添加上,然后再提供解决方法: package org.jivesoftware.openfire.plugin.friends.test; import org.bson.types.ObjectId; import org.jivesof

jQuery+json实现的简易Ajax调用实例_jquery

本文实例讲述了jQuery+json实现的简易Ajax调用.分享给大家供大家参考,具体如下: Userservlet.java代码: package com.iss.servlet; import org.json.JSONException; import org.json.JSONObject; import com.iss.pojo.User; import com.iss.util.JSONUtil; public class UserServlet extends HttpServle

Spring MVC配置太多?试试Spring Boot

SpringMVC相信大家已经不再陌生了,大家可能对于Spring的各种XML配置已经产生了厌恶的感觉,Spring官方发布的Springboot 已经很长时间了,Springboot是一款"约定优于配置"的轻量级框架:Springboot首先解决的就是各种繁琐的XML配置,你可以不用任何XML配置,进行web服务的搭建,其次是Springboot本身就继承了web服务器,如果说前端开发人员想在本地启动后端服务不需要进行各种配置,几乎可以做到一键启动. 再有就是目前大热的微服务,而Sp

大数据-ajax异步请求数据问题。。。看不出哪里错了。。。跪求大神指点。。。

问题描述 ajax异步请求数据问题...看不出哪里错了...跪求大神指点... 我做ajax读取Excel表格里的数据...这是JAVA代码 java: public static List<HashMap<Object,Object>> readExcel(String excelPath){ //声明一个集合用于存储解析出来的数据 List<HashMap<Object,Object>> maps = new ArrayList<HashMap&l