`
kangsoft
  • 浏览: 71804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JSON转换通用类

    博客分类:
  • Java
阅读更多

一个用于将相应格式转换成JSON,及JSON到相应格式的通用类

package net.kangsoft.util.common;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.SQLException;
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.Set;

import oracle.sql.CLOB;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 将任意格式的数据转为json数据 日期转换问题yyyy-MM-dd
 */
@SuppressWarnings("unchecked")
public class JsonUtils {
 /**
  * @param array
  *            对象数组
  * @return String 返回部分json字符串[1,2,3]
  */
 public static String arrayToJson(Object[] array) {
  StringBuilder json = new StringBuilder();
  json.append("[");
  if (array != null && array.length > 0) {
   for (Object obj : array) {
    json.append(objectToJson(obj));
    json.append(",");
   }
   json.setCharAt(json.length() - 1, ']');
  } else {
   json.append("]");
  }
  return json.toString();
 }

 /**
  * javabean转换成Json字符串
  * 
  * @param bean
  *            bean对象
  * @return String 返回整个json字符串{a:'a',b:'b'}
  */
 public static String beanToJson(Object bean) {
  StringBuilder json = new StringBuilder();
  json.append("{");
  PropertyDescriptor[] props = null;
  try {
   props = Introspector.getBeanInfo(bean.getClass(), Object.class)
     .getPropertyDescriptors();
  } catch (IntrospectionException e) {
  }
  if (props != null) {
   for (int i = 0; i < props.length; i++) {
    try {
     String name = objectToJson(props[i].getName());
     String value = objectToJson(props[i].getReadMethod()
       .invoke(bean));
     json.append(name);
     json.append(":");
     json.append(value);
     json.append(",");
    } catch (Exception e) {
    }
   }
   json.setCharAt(json.length() - 1, '}');
  } else {
   json.append("}");
  }
  return json.toString();
 }

 /**
  * beanToJsonOnly 获取单条用户信息专用
  * 
  * @param bean
  *            bean对象
  * @return String
  */
 public static String beanToJsonOnly(String root, Object bean) {
  JSONArray jArray = new JSONArray();
  JSONObject jObject = new JSONObject();
  JSONObject jsoObject = new JSONObject();
  PropertyDescriptor[] props = null;
  try {
   props = Introspector.getBeanInfo(bean.getClass(), Object.class)
     .getPropertyDescriptors();
  } catch (IntrospectionException e) {
  }
  if (props != null) {
   for (int i = 0; i < props.length; i++) {
    try {
     String name = objectToJsonforbeanToJsonOnly(props[i]
       .getName());
     String value = objectToJsonforbeanToJsonOnly(props[i]
       .getReadMethod().invoke(bean));
     jObject.put(name, value);
    } catch (Exception e) {
    }
   }
   jArray.add(jObject);
   jsoObject.put(root, jArray);
  } else {
  }
  return jsoObject.toString();
 }

 /***
  * bool转换Json字符串
  * 
  * @param bool
  * @return
  */
 public static String booleanToJson(Boolean bool) {
  return bool.toString();
 }

 /***
  * 日期转换成"yyyy-MM-dd HH:mm:ss"形式的字符串
  * 
  * @param date
  * @return
  */
 public static String date18ToJson(java.util.Date date) {
  String dateFormatString = "";
  SimpleDateFormat sdf = null;
  sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  dateFormatString = sdf.format(date);
  return dateFormatString;
 }
 
 /**
  * 方法说明:用于分页
  * @param rootKey    对应JsonReader.root的key
  * @param rootData   单个页面要显示的数据
  * @param totalKey   对应JsonReader.totalProperty的key
  * @param totalCount 所有记录的条数
  * @return
  */
 public static String pageListToJson(String rootKey, List<?> rootData, String totalKey, long totalCount) {
  StringBuilder json = new StringBuilder();
  json.append("{\"" + rootKey + "\":[");
  if (rootData != null && rootData.size() > 0) {
   for (Object obj : rootData) {
    json.append(objectToJson(obj));
    json.append(",");
   }
   json.setCharAt(json.length() - 1, ']');
  } else {
   json.append("]");
  }
  json.append(",\"" + totalKey + "\":" + totalCount);
  json.append("}");
  return json.toString();
 }
 
 /**
  * 显示所有数据
  * @param key
  * @param list
  * @return
  */
 public static String listToJson(String key, List<?> list) {
  StringBuilder json = new StringBuilder();
  json.append("{success:true,\"" + key + "\":[");
  if (list != null && list.size() > 0) {
   for (Object obj : list) {
    json.append(objectToJson(obj));
    json.append(",");
   }
   json.setCharAt(json.length() - 1, ']');
  } else {
   json.append("]");
  }
  json.append("}");
  return json.toString();
 }

 /**
  * @param map
  *            map对象
  * @return String
  */
 public static String mapToJson(Map<?, ?> map) {
  StringBuilder json = new StringBuilder();
  json.append("{");
  if (map != null && map.size() > 0) {
   for (Object key : map.keySet()) {
    json.append(objectToJson(key));
    json.append(":");
    json.append(objectToJson(map.get(key)));
    json.append(",");
   }
   json.setCharAt(json.length() - 1, '}');
  } else {
   json.append("}");
  }
  return json.toString();
 }
 /**
  * 从map到json转换后如:map[('a','avalue'),('b','bvalue')]->[{key_json:'a',value_json:'avalue'},{key_json:'b',value_json:'bvalue'}]
  * @param map 
  * @param key_json 键转成json后对应json键 
  * @param value_json 值转成json后对应json键
  * @return
  */
 public static String mapToJson(Map<?, ?> map,String key_json,String value_json) {
  StringBuilder json = new StringBuilder();
  json.append("[");
  if (map != null && map.size() > 0) {
   for (Object key : map.keySet()) {
    json.append("{"+key_json+":"+objectToJson(key));
    json.append(",");
    json.append(value_json+":"+objectToJson(map.get(key)));
    json.append("}");
   }
  } else {
   json.append("]");
  }
  return json.toString();
 }

 /***
  * null转换Json字符串
  * 
  * @return 空字符串
  */
 public static String nullToJson() {
  return "";
 }

 /***
  * 数字转换成Json字符串
  * 
  * @param number
  * @return
  */
 public static String numberToJson(Number number) {
  if (number.toString().equals("0") || number.toString().equals("0.0")) {
   return "\"\"";
  }
  return number.toString();
 }

 /***
  * 对象转换Json字符串
  * 
  * @param obj
  * @return
  */
 public static String objectToJson(Object obj) {
  StringBuilder json = new StringBuilder();
  if (obj == null) {
   json.append("\"\"");
  } else if (obj instanceof Number) {
   json.append(numberToJson((Number) obj));
  } else if (obj instanceof Boolean) {
   json.append(booleanToJson((Boolean) obj));
  } else if (obj instanceof String) {
   json.append("\"").append(stringToJson(obj.toString())).append("\"");
  } else if (obj instanceof Object[]) {
   json.append(arrayToJson((Object[]) obj));
  } else if (obj instanceof List) {
   json.append(listToJson(null, (List<?>) obj));
  } else if (obj instanceof Map) {
   json.append(mapToJson((Map<?, ?>) obj));
  } else if (obj instanceof Set) {
   json.append(setToJson((Set<?>) obj));
  } else if (obj instanceof Date) {
   json.append("\"").append(date18ToJson((Date) obj)).append("\"");
  } else {
   json.append(beanToJson(obj));
  }
  return json.toString();
 }

 /**
  * beanToJsonOnly 专用
  * 
  * @param obj
  * @return
  */
 public static String objectToJsonforbeanToJsonOnly(Object obj) {
  StringBuilder json = new StringBuilder();
  if (obj == null) {
   json.append("");
  } else if (obj instanceof Number) {
   json.append(numberToJson((Number) obj));
  } else if (obj instanceof Boolean) {
   json.append(booleanToJson((Boolean) obj));
  } else if (obj instanceof String) {
   json.append("").append(stringToJson(obj.toString())).append("");
  } else if (obj instanceof Object[]) {
   json.append(arrayToJson((Object[]) obj));
  } else if (obj instanceof List) {
   json.append(listToJson(null, (List<?>) obj));
  } else if (obj instanceof Map) {
   json.append(mapToJson((Map<?, ?>) obj));
  } else if (obj instanceof Set) {
   json.append(setToJson((Set<?>) obj));
  } else if (obj instanceof Date) {
   json.append("").append(date18ToJson((Date) obj)).append("");
  } else {
   json.append(beanToJsonOnly(null, obj));
  }
  return json.toString();
 }

 /**
  * @param set
  *            集合对象
  * @return String
  */
 public static String setToJson(Set<?> set) {
  StringBuilder json = new StringBuilder();
  json.append("{");
  if (set != null && set.size() > 0) {
   for (Object obj : set) {
    json.append(objectToJson(obj));
    json.append(",");
   }
   json.setCharAt(json.length() - 1, '}');
  } else {
   json.append("}");
  }
  return json.toString();
 }

 /***
  * 从一个json格式的字符串数组来得到json数组
  * 
  * @param jStrings
  * @return
  */
 public static JSONArray stringArrayToJSONArray(String[] jStrings) {
  JSONArray jArray = new JSONArray();
  JSONObject jobject = null;
  for (int i = 0; i < jStrings.length; i++) {
   jobject = JSONObject.fromObject(jStrings[i]);
   jArray.add(jobject);
   jobject.clear();
  }
  return jArray;
 }

 /***
  * 字符转换Json字符串
  * 
  * @param s
  * @return String
  */
 public static String stringToJson(String s) {
  if (s == null) {
   return nullToJson();
  }
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < s.length(); i++) {
   char ch = s.charAt(i);
   switch (ch) {
   case '"':
    sb.append("\\\"");
    break;
   case '\\':
    sb.append("\\\\");
    break;
   case '\b':
    sb.append("\\b");
    break;
   case '\f':
    sb.append("\\f");
    break;
   case '\n':
    sb.append("\\n");
    break;
   case '\r':
    sb.append("\\r");
    break;
   case '\t':
    sb.append("\\t");
    break;
   case '/':
    sb.append("\\/");
    break;
   default:
    if (ch >= '\u0000' && ch <= '\u001F') {
     String ss = Integer.toHexString(ch);
     sb.append("\\u");
     for (int k = 0; k < 4 - ss.length(); k++) {
      sb.append('0');
     }
     sb.append(ss.toUpperCase());
    } else {
     sb.append(ch);
    }
   }
  }
  return sb.toString();
 }
 
 /**
  * 从json转换成指定的类型 集合
  * @param c ->要转换到的类型
  * @param values ->前台来的json格式字符串数组,数组中每个元素是一个对象的属性集合如{"id":"2","name":"zhangsan"}
  * @return c的集合
  */
 public static List jsonToList(Class c,String[] values)
 {
  List list=new ArrayList();
  try {
   for(String ejson : values)
   {
    if(Common.isEmpty(ejson))
     continue;
    ejson=ejson.substring(ejson.indexOf("{")+1);
    ejson=(ejson.lastIndexOf("}")==-1)?ejson:ejson.substring(0,ejson.lastIndexOf("}"));
    String[] os=ejson.split(",\"");
    Object o=c.getConstructor().newInstance();
     for(String key : os)
     {
      Class filedClass=null;//属性所属的类型 
      try {
       String field=key.substring(0,key.indexOf(":"));//属性名
       if(0==field.indexOf("\""))
        field=field.substring(field.indexOf("\"")+1);//去前双引号(如果有)
       field=(field.lastIndexOf("\"")==-1)?field:field.substring(0,field.lastIndexOf("\""));//去后双引号(如果有)
       String fieldValue=key.substring(key.indexOf(":")+1);//属性值
       if(fieldValue.indexOf("\"")==0)
        fieldValue=fieldValue.substring(fieldValue.indexOf("\"")+1);
       fieldValue=(fieldValue.lastIndexOf("\"")==-1)?fieldValue:fieldValue.substring(0,fieldValue.lastIndexOf("\""));
       Common.setFieldValue(fieldValue, field, o);
      } catch (Exception e) {
       System.err.println("\n\t"+key+"这个属性在指定的类中不存在或值类型不正确!或外键类变量'"
           + key
           + "'必须有一个Long型参数的构造方法(public Example(Long id){})\n\n");
//       e.printStackTrace();
         
      }
     }
    list.add(o);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  return list;
 }
 /**
  * 从json转换成指定的类型 集合
  * @param values ->前台来的json格式字符串数组,数组中每个元素是一个对象的属性集合如{"id":"2","name":"zhangsan"}
  * @return c的集合
  */
 public static List<Map<String,String>> jsonToMap(String[] values)
 {
  List<Map<String,String>> list=new ArrayList<Map<String,String>>();
  try {
   for(String ejson : values)
   {
    Map<String,String> valueMap=new HashMap<String, String>();
    if(Common.isEmpty(ejson))
     continue;
    ejson=ejson.substring(ejson.indexOf("{")+1);
    ejson=(ejson.lastIndexOf("}")==-1)?ejson:ejson.substring(0,ejson.lastIndexOf("}"));
    String[] os=ejson.split(",");
     for(String key : os)
     {
      if(Common.isEmpty(key))
       continue;
      try {
       String field=key.substring(0,key.indexOf(":"));//属性名
       field=field.substring(field.indexOf("\"")+1);//去前双引号(如果有)
       field=(field.lastIndexOf("\"")==-1)?field:field.substring(0,field.lastIndexOf("\""));//去后双引号(如果有)
       String fieldValue=key.substring(key.indexOf(":")+1);//属性值
       fieldValue=fieldValue.substring(fieldValue.indexOf("\"")+1);
       fieldValue=(fieldValue.lastIndexOf("\"")==-1)?fieldValue:fieldValue.substring(0,fieldValue.lastIndexOf("\""));
       valueMap.put(field.trim(), fieldValue.trim());
      } catch (Exception e) {
//        e.printStackTrace();
      }
     }
    list.add(valueMap);
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  return list;
 }
 /**
  * 将传入的集合转换成jsonArray
  * @param values 集合数据,可以是对象
  * @param keys 键,如果是对象传对象的class如:['name',User.class,'gender']
  * @return
  * @throws SqlOperationException
  */
 public static JSONArray listToJsonArray(List values,Object[] keys) 

 {
  if(values==null||values.size()==0)
   return new JSONArray();
  JSONArray ja=new JSONArray();
  for(Object value : values)
  {
   Object[] os=null;
   if(value instanceof Object[])
    os=(Object[])value;
   else
    os=new Object[]{value};
   JSONObject json=new JSONObject();
   int i=0;
   for(Object o : keys){
    if(!(o instanceof Class)){
     Object resultStr=os[i];
     if(os[i] instanceof org.hibernate.lob.SerializableClob)
     {
      CLOB c=(CLOB)((org.hibernate.lob.SerializableClob)os[i]).getWrappedClob();
      try {
       resultStr=c.getSubString(1, (int) c.length());
      } catch (SQLException e) {
       

      }
     }
     json.put(o.toString().trim(), (resultStr==null)?"":resultStr.toString().trim());i++;
     }
    else
    {
     JSONObject jo=new JSONObject();
     jo.put("o", os[i]);
     List<Map<String,String>> list=jsonToMap(new String[]{jo.toString().substring(5, jo.toString().length()-2)});
     Map<String,String> om=list.get(0);
     for(String key : om.keySet())
      json.put(key, Common.invokeMethod(os[i], "get"+key.substring(0,1).toUpperCase()+key.substring(1)));
     i++;
    }
   }
   ja.add(json);
  }
  return ja;
 }
}

 

2
3
分享到:
评论

相关推荐

    C# JSON通用转换类

    3. List转换成Json 4. 对象转换为Json 5. 对象集合转换Json 6. 普通集合转换Json 7. DataSet转换为Json 8. Datatable转换为Json 9. DataReader转换为Json 10. 解析JSON字符串生成对象实体 11. 解析JSON数组生成对象...

    java操作json的通用类

    例如,Jackson库提供了`ObjectMapper`类,可以方便地实现对象到JSON和JSON到对象的转换,同时还支持自定义序列化和反序列化行为。 在`JsonUtil`类中,我们可能看到以下代码片段: ```java import ...

    java处理JSON格式数据的通用类

    这在反序列化JSON数据时非常有用,可以将JSON转换为Java中的实体类实例。 2. `getMap4Json(String jsonString)`:这个方法接收一个JSON字符串并将其转换为一个Map。由于JSON本质上就是一个键值对的集合,所以转换为...

    json-lib通用类

    2. **Java Bean到JSON转换**:相反,如果你有一个Java对象,比如业务逻辑处理后的结果,你可以使用`json-lib`将其转换为JSON字符串。这样,你可以方便地将这些数据发送到客户端,如浏览器,或者存储到支持JSON格式的...

    Json数据转换成对象

    `ezmorph-1.0.6.jar`库主要用于对象的转换,虽然它不是直接处理JSON的,但在处理JSON转换成特定类型的数据时可能会用到,例如将JSON字符串中的数字转换为整数或浮点数。 4. **Commons Logging**: `commons-...

    json工具类,java日期转换,字符串转换等各种工具类

    在Java编程中,工具类(Util Classes)是程序员日常工作中不可或缺的部分,它们提供了一系列静态方法,用于执行常见的任务,如JSON解析、日期处理、字符串操作等。以下是对标题和描述中涉及的知识点的详细说明: 1....

    安卓 JSON实现对象和数组的相互转换

    总结,Android中的JSON转换通常依赖于如Gson这样的库,它们提供了方便的方法来在Java对象和JSON格式之间进行转换。通过创建工具类,我们可以简化代码并提高代码复用性。在实际项目中,还可以根据需求扩展`GsonUtil`...

    java处理JSON格式数据的通用类.pdf

    Java 处理 JSON 格式数据的通用类可以将 JSON 字符串转换为 Java 对象,也可以将 Java 对象转换为 JSON 字符串。 在 Java 中,处理 JSON 格式数据的常用方法有两种:一是使用 Java 自带的 JSON 处理类,二是使用第...

    json.zip_C++_JSON_json 类_json 结构体

    3. **函数参数**:使用JSON类作为函数参数,可以接受各种类型的输入,增强了代码的通用性。比如,一个接受JSON对象并根据其内容执行不同操作的函数: ```cpp void processJson(const json& j) { if (j.is_object...

    C++结构体和json/xml之间互相转换

    在C++中将结构体转换为JSON或XML,我们需要定义一个映射规则,将结构体的每个成员对应到JSON或XML的键值。这通常涉及到反射(reflection)的概念,即程序能够自我检查其结构。由于C++标准库不直接支持反射,我们通常...

    一个java处理JSON格式数据的通用类.pdf

    本文档将详细介绍一个用于Java中处理JSON数据的通用类——`JsonUtil`,该类封装了一系列方法用于实现JSON与Java对象之间的转换。 #### 类结构及包引入 `JsonUtil`位于`com.linghui.common.util`包下。为了实现JSON...

    delphi数据集和json互转

    它支持解析JSON字符串到JSON对象,以及将JSON对象转换回字符串。在Delphi中,你可以通过导入lkJSON库,然后调用其提供的方法来操作JSON数据。 要将数据集转换为JSON,通常需要以下步骤: 1. 初始化lkJSON库:在你...

    json转lua-table工具

    本文将详细介绍如何使用Python脚本`jsonToLua.py`将JSON数据转换为Lua Table格式,并探讨相关概念和技术。 首先,JSON是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但又具有自我描述性,易于人...

    json转为xml jar

    本教程将围绕如何使用Java的jar包将JSON转换为XML展开,主要涉及以下几个关键知识点: 1. JSON和XML的基本概念: - JSON是一种轻量级的数据交换格式,它允许数据以键值对的形式存储,易于人阅读和编写,同时也易于...

    spirng.json转换包

    标题中的“spirng.json转换包”可能是指一个与Spring框架相关的JSON处理工具或库,用于在Spring应用中方便地进行JSON数据的转换和操作。在实际的开发中,JSON(JavaScript Object Notation)已经成为一种广泛使用的...

    C#通用类数据库连接、日志、http类、json解析、xml、RTX接口调用

    本压缩包“C#通用类数据库连接、日志、http类、json解析、xml、RTX接口调用”提供了C#编程中常用的一些核心功能模块,这些模块对于任何C#开发者来说都是至关重要的。以下将详细介绍每个模块的知识点: 1. **数据库...

Global site tag (gtag.js) - Google Analytics