2025-02-10

001
/** 
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
}
有的方法有重構,其中多瞭一個參數,其中這個參數的作用是當你一個類有的字段不需要轉換的時候,你隻需把需要轉換的字段屬性通過逗號分隔傳入就可以瞭!


作者“緣敘的博客”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *