下面列出了怎么用com.alibaba.fastjson.serializer.SerializeWriter的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* 可以允许指定一些过滤字段进行生成json对象
*/
public static String marshalToString(Object obj, String... fliterFields) {
final List<String> propertyFliters = Arrays.asList(fliterFields);
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return !propertyFliters.contains(name);
}
});
serializer.write(obj);
return out.toString();
} finally {
out.close();
}
}
@Override
public void write(final JSONSerializer serializer, final Object object, final Object fieldName, final Type fieldType, final int features) throws IOException {
if (object == null) {
serializer.writeNull();
} else {
SerializeWriter out = serializer.getWriter();
out.write('{');
BackupShard backupShard = (BackupShard) object;
writeString(out, "name", backupShard.getName());
writeString(out, "region", backupShard.getRegion());
writeString(out, "dataCenter", backupShard.getDataCenter());
writeString(out, "protocol", backupShard.getProtocol());
writeString(out, "address", backupShard.getAddress());
out.writeFieldName("weight");
out.writeInt(backupShard.getWeight());
out.write('}');
}
}
/**
* 写值
*
* @param out 输出
* @param field 字段
* @param value 值
* @param ignoreNull 是否忽略null值
* @param separator 分隔符位置
*/
protected void writeString(final SerializeWriter out, final String field, final String value,
final boolean ignoreNull, final int separator) {
if (value != null || !ignoreNull) {
if (separator == BEFORE) {
out.write(',');
}
out.writeFieldName(field);
if (value == null) {
out.writeNull();
} else {
out.writeString(value);
}
if (separator == AFTER) {
out.write(',');
}
}
}
/**
* 可以允许指定一些过滤字段进行生成json对象
*/
public static String marshalToString(Object obj, String... fliterFields) {
final List<String> propertyFliters = Arrays.asList(fliterFields);
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return !propertyFliters.contains(name);
}
});
serializer.write(obj);
return out.toString();
} finally {
out.close();
}
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.out;
if (object == null) {
out.writeNull();
return;
}
Record record = (Record) object;
Entity entity = record.getEntity();
JSONObject map = new JSONObject();
for (Iterator<String> iter = record.getAvailableFieldIterator(); iter.hasNext(); ) {
String field = iter.next();
Object value = record.getObjectValue(field);
value = FieldValueWrapper.instance.wrapFieldValue(value, entity.getField(field), false);
map.put(field, value);
}
out.write(map.toJSONString());
}
/**
* Set Fastjson SerializeWriter ThreadLocal value
*/
public static void setSerializeWriterBufThreadLocal(char[] charsBuf, byte[] bytesBuf) {
Class<SerializeWriter> clazz = SerializeWriter.class;
try {
//set threadLocal value
if (serializeWriterBufLocalField == null) {
serializeWriterBufLocalField = clazz.getDeclaredField("bufLocal");
}
serializeWriterBufLocalField.setAccessible(true);
ThreadLocal<char[]> bufLocal = (ThreadLocal<char[]>) serializeWriterBufLocalField.get(null);
bufLocal.set(charsBuf);
if (serializeWriterBytesBufLocal == null) {
serializeWriterBytesBufLocal = clazz.getDeclaredField("bytesBufLocal");
}
serializeWriterBytesBufLocal.setAccessible(true);
ThreadLocal<byte[]> bytesBufLocal = (ThreadLocal<byte[]>) serializeWriterBytesBufLocal.get(null);
bytesBufLocal.set(bytesBuf);
} catch (Throwable e) {
logger.error("update SerializeWriter.BUFFER_THRESHOLD value failed", e);
}
}
/**
* 对象转json
* <p>
* 需要jsonFiled注解
* </p>
*
* @param object a {@link java.lang.Object} object.
* @return a {@link java.lang.String} object.
*/
public static String toJSONString(Object object) {
SerializeWriter out = new SerializeWriter();
try {
Map<String, Field> fieldCacheMap = new HashMap<>();
ParserConfig.parserAllFieldToCache(object.getClass(), fieldCacheMap);
JSONSerializer serializer = new JSONSerializer(out);
PropertyFilter filter = (Object source, String name, Object value) -> {
Field field = ParserConfig.getFieldFromCache(name, fieldCacheMap);
if (field != null) {
JSONField fieldAnnotation = field.getAnnotation(JSONField.class);
if (fieldAnnotation != null) {
return true;
}
return false;
}
return true;
};
serializer.getPropertyFilters().add(filter);
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}
public void write(JSONSerializer serializer, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter writer = serializer.out;
if ((features & SerializerFeature.BrowserSecure.mask) != 0
|| (writer.isEnabled(SerializerFeature.BrowserSecure.mask)))
{
writer.write(SECURITY_PREFIX);
}
writer.write(function);
writer.write('(');
for (int i = 0; i < parameters.size(); ++i) {
if (i != 0) {
writer.write(',');
}
serializer.write(parameters.get(i));
}
writer.write(')');
}
public void write(JSONSerializer serializer, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter writer = serializer.out;
if(jsonpFunction == null){
serializer.write(value);
return;
}
if ((features & BrowserSecureMask) != 0 || (writer.isEnabled(BrowserSecureMask))) {
writer.write(SECURITY_PREFIX);
}
writer.write(jsonpFunction);
writer.write('(');
serializer.write(value);
writer.write(')');
}
/**
* 可以允许指定一些过滤字段进行生成json对象
*/
public static String marshalToString(Object obj, String... fliterFields) {
final List<String> propertyFliters = Arrays.asList(fliterFields);
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return !propertyFliters.contains(name);
}
});
serializer.write(obj);
return out.toString();
} finally {
out.close();
}
}
/**
* 将一个包含Date类型数据的Object序列化成字符串
* @param object
* @param dateFormat
* @param features
* @return
*/
public static String toJSONStringWithDateFormat(Object object, String dateFormat, SerializerFeature... features) {
SerializeWriter out = new SerializeWriter();
try {
SerializeConfig config = new SerializeConfig();
JSONSerializer serializer = new JSONSerializer(out,config );
if(dateFormat != null) {
serializer.setDateFormat(dateFormat);
}
for (com.alibaba.fastjson.serializer.SerializerFeature feature : features) {
serializer.config(feature, true);
}
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}
@Override
public void writeValue(JSONSerializer serializer, Object propertyValue) throws Exception {
SerializeWriter out = serializer.getWriter();
Object value = propertyValue;
if (value == null) {
if (out.isEnabled(SerializerFeature.WriteNullNumberAsZero)) {
out.write('0');
} else {
out.writeNull();
}
return;
}
out.append(value.toString());
}
private static final byte[] toJSONBytes(Object object, String charsetName,
SerializerFeature... features) {
if(charsetName == null){
charsetName = DEFAULT_ENCODING;
}
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
for (SerializerFeature feature : features) {
serializer.config(feature, true);
}
serializer.write(object);
return out.toBytes(charsetName);
} finally {
out.close();
}
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
out.write('0');
return;
}
double doubleValue = ((Double) object).doubleValue();
if (Double.isNaN(doubleValue)||Double.isInfinite(doubleValue)) {
out.write('0');
} else {
String doubleText = Double.toString(doubleValue);
NumberUtil.decimal(doubleText, digits, fullZero);
out.append(doubleText);
if (serializer.isEnabled(SerializerFeature.WriteClassName)) {
out.write('D');
}
}
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features)
throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
out.writeNull();
return;
}
Tree<?> tree = (Tree<?>) object;
if (tree.isCheckable()) {
visitCheck(tree.getRoots(), tree.getChecked());
}
if (!Strings.isNullOrEmpty(tree.getIconProperty())) {
visitIcon(tree.getRoots(), tree.getIconProperty());
}
if (tree.isExpandAll()) {
expandAll(tree.getRoots());
}
serializer.write(tree.getRoots());
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
Timer timer = (Timer) object;
final Snapshot snapshot = timer.getSnapshot();
SerializeWriter writer = serializer.getWriter();
writer.writeFieldValue('{', "count", timer.getCount());
writer.writeFieldValue(',', "max", snapshot.getMax() * durationFactor);
writer.writeFieldValue(',', "mean", snapshot.getMean() * durationFactor);
writer.writeFieldValue(',', "min", snapshot.getMin() * durationFactor);
writer.writeFieldValue(',', "p50", snapshot.getMedian() * durationFactor);
writer.writeFieldValue(',', "p75", snapshot.get75thPercentile() * durationFactor);
writer.writeFieldValue(',', "p95", snapshot.get95thPercentile() * durationFactor);
writer.writeFieldValue(',', "p98", snapshot.get98thPercentile() * durationFactor);
writer.writeFieldValue(',', "p99", snapshot.get99thPercentile() * durationFactor);
writer.writeFieldValue(',', "p999", snapshot.get999thPercentile() * durationFactor);
writer.writeFieldValue(',', "stddev", snapshot.getStdDev() * durationFactor);
writer.writeFieldValue(',', "m15_rate", timer.getFifteenMinuteRate() * rateFactor);
writer.writeFieldValue(',', "m1_rate", timer.getOneMinuteRate() * rateFactor);
writer.writeFieldValue(',', "m5_rate", timer.getFiveMinuteRate() * rateFactor);
writer.writeFieldValue(',', "mean_rate", timer.getMeanRate() * rateFactor);
writer.writeFieldValue(',', "duration_units", durationUnit);
writer.writeFieldValue(',', "rate_units", rateUnit);
writer.write('}');
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
Histogram histogram = (Histogram) object;
SerializeWriter writer = serializer.getWriter();
final Snapshot snapshot = histogram.getSnapshot();
writer.writeFieldValue('{', "count", histogram.getCount());
writer.writeFieldValue(',', "max", snapshot.getMax());
writer.writeFieldValue(',', "mean", snapshot.getMean());
writer.writeFieldValue(',', "min", snapshot.getMin());
writer.writeFieldValue(',', "p50", snapshot.getMedian());
writer.writeFieldValue(',', "p75", snapshot.get75thPercentile());
writer.writeFieldValue(',', "p95", snapshot.get95thPercentile());
writer.writeFieldValue(',', "p98", snapshot.get98thPercentile());
writer.writeFieldValue(',', "p99", snapshot.get99thPercentile());
writer.writeFieldValue(',', "p999", snapshot.get999thPercentile());
writer.writeFieldValue(',', "stddev", snapshot.getStdDev());
writer.write('}');
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
out.writeNull();
return;
}
Class cls = object.getClass();
if (cls == DateTime.class) {
out.writeString(dateTimeCodec().toString((DateTime) object));
return;
} else if (cls == LocalDateTime.class) {
out.writeString(localDateTimeCodec().toString((LocalDateTime) object));
return;
} else if (cls == LocalDate.class) {
out.writeString(localDateCodec().toString((LocalDate) object));
return;
} else if (cls == LocalTime.class) {
out.writeString(localTimeCodec().toString((LocalTime) object));
return;
}
out.writeString(object.toString());
}
@Override
public void write(
JSONSerializer serializer,
Object object,
Object fieldName,
Type fieldType,
int features
) {
SerializeWriter out = serializer.getWriter();
if (object == null) {
out.writeNull();
} else {
Class cls = object.getClass();
if (cls == DateTime.class) {
out.writeString(object.toString());
} else {
out.writeString(object.toString());
}
}
}
/**
* 可以允许指定一些过滤字段进行生成json对象
*/
public static String marshalToString(Object obj, String... fliterFields) {
final List<String> propertyFliters = Arrays.asList(fliterFields);
SerializeWriter out = new SerializeWriter();
try {
JSONSerializer serializer = new JSONSerializer(out);
serializer.getPropertyFilters().add(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return !propertyFliters.contains(name);
}
});
serializer.write(obj);
return out.toString();
} finally {
out.close();
}
}
@Override
public void writeObject(Object obj) throws IOException {
SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.config(SerializerFeature.WriteEnumUsingToString, true);
serializer.write(obj);
out.writeTo(writer);
out.close(); // for reuse SerializeWriter buf
writer.println();
writer.flush();
}
/**
* 写值
*
* @param serializer 输出
* @param field 字段
* @param value 值
* @param ignoreNull 是否忽略null值
* @param separator 分隔符位置
*/
protected void write(final JSONSerializer serializer, final String field, final Object value,
final boolean ignoreNull, final int separator) {
if (value != null || !ignoreNull) {
SerializeWriter out = serializer.getWriter();
if (separator == BEFORE) {
out.write(',');
}
out.writeFieldName(field);
serializer.write(value);
if (separator == AFTER) {
out.write(',');
}
}
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException {
AVObject avObject = (AVObject)object;
SerializeWriter writer = serializer.getWriter();
writer.write('{');
// for 1.1.70.android fastjson, we dont use writer.writeFieldValue(seperator, field, value) method.
writer.write(' ');
// writer.writeFieldName("@type", false);
// writer.writeString(avObject.getClass().getName());
// writer.write(',');
writer.writeFieldName(KEY_VERSION, false);
writer.writeString(DEFAULT_VERSION);
writer.write(',');
writer.writeFieldName(AVObject.KEY_CLASSNAME, false);
writer.writeString(avObject.getClassName());
writer.write(',');
writer.writeFieldName(KEY_SERVERDATA, false);
if (AVOSCloud.isEnableCircularReferenceDetect()) {
writer.write(JSON.toJSONString(avObject.serverData, ObjectValueFilter.instance, SerializerFeature.WriteClassName));
} else {
writer.write(JSON.toJSONString(avObject.serverData, ObjectValueFilter.instance, SerializerFeature.WriteClassName,
SerializerFeature.DisableCircularReferenceDetect));
}
writer.write('}');
}
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException {
BaseOperation op = (BaseOperation)object;
SerializeWriter writer = serializer.getWriter();
writer.write('{');
writer.writeFieldValue(' ', ATTR_OP, op.getOperation());
writer.writeFieldValue(' ', ATTR_FIELD, op.getField());
writer.writeFieldValue(',', ATTR_FINAL, op.isFinal);
if (AVOSCloud.isEnableCircularReferenceDetect()) {
writer.writeFieldValue(',', ATTR_OBJECT,
JSON.toJSONString(op.getValue(), ObjectValueFilter.instance,
SerializerFeature.WriteClassName));
} else {
writer.writeFieldValue(',', ATTR_OBJECT,
JSON.toJSONString(op.getValue(), ObjectValueFilter.instance,
SerializerFeature.WriteClassName, SerializerFeature.DisableCircularReferenceDetect));
}
if (object instanceof CompoundOperation) {
if (AVOSCloud.isEnableCircularReferenceDetect()) {
writer.writeFieldValue(',', ATTR_SUBOPS,
JSON.toJSONString(((CompoundOperation)op).getSubOperations(), ObjectValueFilter.instance,
SerializerFeature.WriteClassName));
} else {
writer.writeFieldValue(',', ATTR_SUBOPS,
JSON.toJSONString(((CompoundOperation)op).getSubOperations(), ObjectValueFilter.instance,
SerializerFeature.WriteClassName, SerializerFeature.DisableCircularReferenceDetect));
}
}
writer.write('}');
}
@Override
public byte[] encodeResponseData(Object data,RpcMethod rpcMethod) {
if(data == null){
return EMPTY;
}
try (SerializeWriter out = new SerializeWriter(null, JSON.DEFAULT_GENERATE_FEATURE,
SERIALIZER_FEATURES)) {
JSONSerializer serializer = new JSONSerializer(out, SerializeConfig.globalInstance);
serializer.write(data);
return out.toBytes(CHARSET_UTF8);
}
}
/**
* Set Fastjson SerializeWriter Buffer Threshold
* @param value
*/
public static void setSerializeWriterBufferThreshold(int value) {
Class<SerializeWriter> clazz = SerializeWriter.class;
try {
if (serializeWriterBufferThreshold == null) {
serializeWriterBufferThreshold = clazz.getDeclaredField("BUFFER_THRESHOLD");
}
serializeWriterBufferThreshold.setAccessible(true);
serializeWriterBufferThreshold.set(null, value);
} catch (Throwable e) {
logger.error("update SerializeWriter.BUFFER_THRESHOLD value failed", e);
}
}
/**
* Set Fastjson SerializeWriter ThreadLocal value
* @param bufSize
*/
public static void setSerializeWriterBufThreadLocal(int bufSize) {
Class<SerializeWriter> clazz = SerializeWriter.class;
try {
//set threadLocal value
if (serializeWriterBufLocalField == null) {
serializeWriterBufLocalField = clazz.getDeclaredField("bufLocal");
}
serializeWriterBufLocalField.setAccessible(true);
ThreadLocal<char[]> bufLocal = (ThreadLocal<char[]>) serializeWriterBufLocalField.get(null);
char[] charsLocal = bufLocal.get();
if (charsLocal == null || charsLocal.length < bufSize) {
bufLocal.set(new char[bufSize]);
}
if (serializeWriterBytesBufLocal == null) {
serializeWriterBytesBufLocal = clazz.getDeclaredField("bytesBufLocal");
}
serializeWriterBytesBufLocal.setAccessible(true);
ThreadLocal<byte[]> bytesBufLocal = (ThreadLocal<byte[]>) serializeWriterBytesBufLocal.get(null);
byte[] bytesLocal = bytesBufLocal.get();
if (bytesLocal == null || bytesLocal.length < bufSize) {
bytesBufLocal.set(new byte[bufSize]);
}
} catch (Throwable e) {
logger.error("update SerializeWriter.BUFFER_THRESHOLD value failed", e);
}
}
@Override
public byte[] serialize(Object data) throws IOException {
SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.config(SerializerFeature.WriteEnumUsingToString, true);
serializer.config(SerializerFeature.WriteClassName, true);
serializer.write(data);
return out.toBytes(CHARSET_UTF8);
}
public void writeObject(Object obj) throws IOException {
SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.config(SerializerFeature.WriteEnumUsingToString, true);
serializer.write(obj);
out.writeTo(writer);
out.close(); // for reuse SerializeWriter buf
writer.println();
writer.flush();
}
public void writeObject(Object obj) throws IOException {
SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.config(SerializerFeature.WriteEnumUsingToString, true);
serializer.write(obj);
out.writeTo(writer);
writer.println();
writer.flush();
}