001
014
015 package com.liferay.portal.json;
016
017 import com.liferay.portal.kernel.json.JSONSerializer;
018 import com.liferay.portal.kernel.json.JSONTransformer;
019
020 import jodd.json.JoddJson;
021 import jodd.json.JsonContext;
022 import jodd.json.JsonSerializer;
023 import jodd.json.TypeJsonSerializer;
024
025 import org.json.JSONArray;
026 import org.json.JSONObject;
027
028
031 public class JSONSerializerImpl implements JSONSerializer {
032
033 public JSONSerializerImpl() {
034 _jsonSerializer = new JsonSerializer();
035 }
036
037 @Override
038 public JSONSerializerImpl exclude(String... fields) {
039 _jsonSerializer.exclude(fields);
040
041 return this;
042 }
043
044 @Override
045 public JSONSerializerImpl include(String... fields) {
046 _jsonSerializer.include(fields);
047
048 return this;
049 }
050
051 @Override
052 public String serialize(Object target) {
053 return _jsonSerializer.serialize(target);
054 }
055
056 @Override
057 public String serializeDeep(Object target) {
058 return _jsonSerializer.deep(true).serialize(target);
059 }
060
061 @Override
062 public JSONSerializerImpl transform(
063 JSONTransformer jsonTransformer, Class<?> type) {
064
065 TypeJsonSerializer<?> typeJsonSerializer = null;
066
067 if (jsonTransformer instanceof TypeJsonSerializer) {
068 typeJsonSerializer = (TypeJsonSerializer<?>)jsonTransformer;
069 }
070 else {
071 typeJsonSerializer = new JoddJsonTransformer(jsonTransformer);
072 }
073
074 _jsonSerializer.use(type, typeJsonSerializer);
075
076 return this;
077 }
078
079 @Override
080 public JSONSerializerImpl transform(
081 JSONTransformer jsonTransformer, String field) {
082
083 TypeJsonSerializer<?> typeJsonSerializer = null;
084
085 if (jsonTransformer instanceof TypeJsonSerializer) {
086 typeJsonSerializer = (TypeJsonSerializer<?>)jsonTransformer;
087 }
088 else {
089 typeJsonSerializer = new JoddJsonTransformer(jsonTransformer);
090 }
091
092 _jsonSerializer.use(field, typeJsonSerializer);
093
094 return this;
095 }
096
097 static {
098 JoddJson.defaultSerializers.register(
099 JSONArray.class, new JSONArrayTypeJSONSerializer());
100 JoddJson.defaultSerializers.register(
101 JSONObject.class, new JSONObjectTypeJSONSerializer());
102 JoddJson.defaultSerializers.register(
103 Long.TYPE, new LongToStringTypeJSONSerializer());
104 JoddJson.defaultSerializers.register(
105 Long.class, new LongToStringTypeJSONSerializer());
106 }
107
108 private final JsonSerializer _jsonSerializer;
109
110 private static class JSONArrayTypeJSONSerializer
111 implements TypeJsonSerializer<JSONArray> {
112
113 @Override
114 public void serialize(JsonContext jsonContext, JSONArray jsonArray) {
115 jsonContext.write(jsonArray.toString());
116 }
117
118 }
119
120 private static class JSONObjectTypeJSONSerializer
121 implements TypeJsonSerializer<JSONObject> {
122
123 @Override
124 public void serialize(JsonContext jsonContext, JSONObject jsonObject) {
125 jsonContext.write(jsonObject.toString());
126 }
127
128 }
129
130 private static class LongToStringTypeJSONSerializer
131 implements TypeJsonSerializer<Long> {
132
133 @Override
134 public void serialize(JsonContext jsonContext, Long value) {
135 jsonContext.writeString(Long.toString(value));
136 }
137
138 }
139
140 }