JsonUtils.java
4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.jfinal.weixin.sdk.utils;
import com.jfinal.json.FastJson;
import com.jfinal.json.JFinalJson;
import com.jfinal.json.Json;
import com.jfinal.plugin.activerecord.CPI;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Record;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* Json转换
* 默认使用jackson
* 再次fastJson
* 最后使用jsonKit
*
* @author L.cm
* email: 596392912@qq.com
* site:http://www.dreamlu.net
* date 2015年5月13日下午4:58:33
*/
public final class JsonUtils {
private JsonUtils() {}
/**
* 将model转为json字符串
* @param model jfinal model
* @return JsonString
*/
public static String toJson(Model<? extends Model<?>> model) {
return toJson(CPI.getAttrs(model));
}
/**
* 将Collection<Model>转换为json字符串
* @param models jfinal model
* @return JsonString
*/
public static String toJson(Collection<Model<? extends Model<?>>> models) {
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
for (Model<? extends Model<?>> model : models) {
list.add(CPI.getAttrs(model));
}
return toJson(list);
}
/**
* 将 record 转为json字符串
* @param record jfinal record
* @return JsonString
*/
public static String toJson(Record record) {
return toJson(record.getColumns());
}
/**
* 将List<Record>转换为json字符串
* @param records jfinal records
* @return JsonString
*/
public static String toJson(List<Record> records) {
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
for (Record record : records) {
list.add(record.getColumns());
}
return toJson(list);
}
// Json
private static final Json json;
static {
Json jsonToUse = null;
// com.fasterxml.jackson.databind.ObjectMapper?
if (ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", JsonUtils.class.getClassLoader())) {
jsonToUse = new Jackson();
}
// com.alibaba.fastjson.JSONObject?
else if (ClassUtils.isPresent("com.alibaba.fastjson.JSONObject", JsonUtils.class.getClassLoader())) {
jsonToUse = new FastJson();
}
// JFinalJson
else {
jsonToUse = new JFinalJson();
}
json = jsonToUse;
}
/**
* 解决微信特殊字符的乱码
*/
private static class Jackson extends Json {
private final com.fasterxml.jackson.databind.ObjectMapper objectMapper;
public Jackson() {
this.objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
this.objectMapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
this.objectMapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER, true);
}
@Override
public String toJson(Object object) {
try {
return objectMapper.writeValueAsString(object);
} catch (Exception e) {
throw e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e);
}
}
@Override
public <T> T parse(String jsonString, Class<T> type) {
try {
return objectMapper.readValue(jsonString, type);
} catch (Exception e) {
throw e instanceof RuntimeException ? (RuntimeException) e : new RuntimeException(e);
}
}
}
/**
* 将 Object 转为json字符串
* @param object 对象
* @return JsonString
*/
public static String toJson(Object object) {
if (json == null) {
throw new RuntimeException("Jackson, Fastjson or JFinalJson not supported");
}
return json.toJson(object);
}
/**
* 将 json字符串 转为Object
* @param jsonString json字符串
* @param valueType 结果类型
* @param <T> 泛型标记
* @return T 结果
*/
public static <T> T parse(String jsonString, Class<T> valueType) {
if (json == null) {
throw new RuntimeException("Jackson, Fastjson not supported");
}
return json.parse(jsonString, valueType);
}
}