分享

Java关于JSON数据格式转换

 BlazerOfIT 2012-04-10
/**   
002  * @Title JSONUtils.java 
003  * @Package com.fbtt.site.utils 
004  * @author huangsm 
005  * @email huangsanm@gmail.com 
006  * @date 2011-7-22 下午02:50:42 
007  * @remark 
008  * @version V1.0
009  */ 
010 package com.fbtt.axst.utils;
011   
012 import java.beans.PropertyDescriptor;
013 import java.sql.Date;
014 import java.util.List;
015 import java.util.Map;
016   
017 import org.apache.commons.beanutils.PropertyUtils;
018   
019 /** 
020  * @ClassName: JSONUtils 
021  * @author huangsm
022  * @date 2011-7-22 下午02:50:42 
023  * @remark  
024  */
025 public class JSONUtils {
026   
027     public static String stringToJson(String s) {
028         if (s == null) {
029             return nullTOJson();
030         }
031         StringBuilder sb = new StringBuilder();
032         for (int i = 0; i < s.length(); i++) {
033             char ch = s.charAt(i);
034             switch (ch) {
035             case '"':
036                 sb.append("\\\"");
037                 break;
038             case '\\':
039                 sb.append("\\\\");
040                 break;
041             case '\b':
042                 sb.append("\\b");
043                 break;
044             case '\f':
045                 sb.append("\\f");
046                 break;
047             case '\n':
048                 sb.append("\\n");
049                 break;
050             case '\r':
051                 sb.append("\\r");
052                 break;
053             case '\t':
054                 sb.append("\\t");
055                 break;
056             case '/':
057                 sb.append("\\/");
058                 break;
059             default:
060                 if (ch >= '\u0000' && ch <= '\u001F') {
061                     String ss = Integer.toHexString(ch);
062                     sb.append("\\u");
063                     for (int k = 0; k < 4 - ss.length(); k++) {
064                         sb.append('0');
065                     }
066                     sb.append(ss.toUpperCase());
067                 } else {
068                     sb.append(ch);
069                 }
070             }
071         }
072         return sb.toString();
073     }
074     /***
075      * 对象转换成为json
076      * 这里是描述这个方法的作用
077      * @return
078      * @author Java  
079      * @date 2011-7-22 下午02:59:13
080      */
081     public static String objectToJson(Object obj){
082         StringBuffer json = new StringBuffer();
083         if (obj == null) {
084             json.append("\"\"");
085         } else if (obj instanceof Integer) {
086             json.append("\"").append(numberToJson((Integer)obj)).append("\"");
087         } else if (obj instanceof Boolean) {
088             json.append("\"").append(booleanToJson((Boolean)obj)).append("\"");
089         } else if (obj instanceof String) {
090             json.append("\"").append(stringToJson(obj.toString())).append("\"");
091         } else if (obj instanceof Object[]) {
092             json.append("\"").append(arrayToJson((Object[])obj)).append("\"");
093         } else if (obj instanceof List) {
094             json.append("\"").append(listToJson((List<?>)obj)).append("\"");
095         } else if (obj instanceof Map) {
096             json.append("\"").append(mapToJson((Map<?, ?>)obj)).append("\"");
097         } else if(obj instanceof java.sql.Date){
098             json.append("\"").append(dateToJson((Date)obj)).append("\"");
099         } else if(obj instanceof java.util.Date){
100             json.append("\"").append(dateToJson((Date)obj)).append("\"");
101         } else {
102             json.append("\"").append(stringToJson(obj.toString())).append("\"");
103         }
104         return json.toString();
105     }
106       
107     /**
108      * 这里是描述这个方法的作用
109      * @param obj
110      * @return {["pname":"val"],["pname":"val"]...}
111      * @author Java  
112      * @date 2011-7-22 下午03:02:49 
113      */ 
114     public static String beanToJson(Object obj) {
115         StringBuffer json = new StringBuffer("{");
116         try {
117             PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj);
118             if(pds != null && pds.length > 0){
119                 for (PropertyDescriptor pd : pds) {
120                     if(pd.getName().equals("class"))
121                         continue;
122                     String pname = objectToJson(pd.getName());
123                     String val = objectToJson(pd.getReadMethod().invoke(obj));
124                     json.append(pname);
125                     json.append(":");
126                     json.append(val);
127                     json.append(",");
128                 }
129                 json.setCharAt(json.length() - 1, '}');
130             }else{
131                 json.append("}");
132             }
133         } catch (Exception e) {
134             e.printStackTrace();
135         }
136         return json.toString();
137     }
138       
139     public static String beanToJson(Object obj, String params) {
140         StringBuffer json = new StringBuffer("{");
141         try {
142             PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj);
143             if(pds != null && pds.length > 0){
144                 for (PropertyDescriptor pd : pds) {
145                     String pname = pd.getName();
146                     if(pname.equals("class"))
147                         continue;
148                     if(params.indexOf(pname) == -1)
149                         continue;
150                     pname = objectToJson(pname);
151                     String val = objectToJson(pd.getReadMethod().invoke(obj));
152                     json.append(pname);
153                     json.append(":");
154                     json.append(val);
155                     json.append(",");
156                 }
157                 json.setCharAt(json.length() - 1, '}');
158             }else{
159                 json.append("}");
160             }
161         } catch (Exception e) {
162             e.printStackTrace();
163         }
164         return json.toString();
165     }
166   
167       
168     /**
169      * 这里是描述这个方法的作用
170      * @param obj
171      * @return
172      * @see 
173      * @author Java  
174      * @date 2011-7-22 下午03:02:27 
175      */ 
176     public static String mapToJson(Map<?, ?> map) {
177         StringBuilder json = new StringBuilder();
178         json.append("{");
179         if (map != null && map.size() > 0) {
180             for (Object key : map.keySet()) {
181                 json.append("" + objectToJson(key) + "");
182                 json.append(":");
183                 json.append("" + objectToJson(map.get(key)) + "");
184                 json.append(",");
185             }
186             json.setCharAt(json.length() - 1, '}');
187         } else {
188             json.append("}");
189         }
190         return json.toString();
191     }
192   
193     /**
194      * 这里是描述这个方法的作用
195      * @param obj
196      * @return
197      * @author Java  
198      * @date 2011-7-22 下午03:02:15 
199      */ 
200     public static String listToJson(List<?> list) {
201         StringBuffer json = new StringBuffer();
202         json.append("[");
203         if (list != null && list.size() > 0) {
204             for (Object obj : list) {
205                 json.append(beanToJson(obj));
206                 json.append(",");
207             }
208             json.setCharAt(json.length() - 1, ']');
209         } else {
210             json.append("]");
211         }
212         return json.toString();
213     }
214       
215     public static String listToJson(List<?> list, String params) {
216         StringBuffer json = new StringBuffer();
217         json.append("[");
218         if (list != null && list.size() > 0) {
219             for (Object obj : list) {
220                 json.append(beanToJson(obj, params));
221                 json.append(",");
222             }
223             json.setCharAt(json.length() - 1, ']');
224         } else {
225             json.append("]");
226         }
227         return json.toString();
228     }
229   
230     /**
231      * 这里是描述这个方法的作用
232      * @param obj
233      * @return
234      * @see 
235      * @author Java  
236      * @date 2011-7-22 下午03:02:05 
237      */ 
238     private static String arrayToJson(Object[] array) {
239          StringBuilder json = new StringBuilder();
240         json.append("{");
241         if (array != null && array.length > 0) {
242             for (Object obj : array) {
243                 json.append(objectToJson(obj));
244                 json.append(",");
245             }
246             json.setCharAt(json.length() - 1, ']');
247         } else {
248             json.append("}");
249         }
250         return json.toString();
251     }
252   
253     public static String dateToJson(Date date){
254         return date.toString();
255     }
256       
257     public static String numberToJson(Number number) {
258         return number.toString();
259     }
260   
261     public static String booleanToJson(Boolean bool) {
262         return bool.toString();
263     }
264       
265     public static String nullTOJson(){
266         return "";
267     }
268     /**
269      * 非空验证
270      * 这里是描述这个方法的作用
271      * @param arg0
272      * @return
273      * @author Java  
274      * @date 2011-7-22 下午02:51:43
275      */
276     public static Boolean isNull(Object arg0){
277         if(arg0 == null) return true;
278         String arg = (String) arg0;
279         return ("".equals(arg.trim()) || "null".equals(arg)) ? true : false;
280     }
281 }
有的方法有重构,其中多了一个参数,其中这个参数的作用是当你一个类有的字段不需要转换的时候,你只需把需要转换的字段属性通过逗号分隔传入就可以了!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约