下面列出了怎么用com.alibaba.fastjson.serializer.JSONSerializer的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 {
Call call = (Call) object;
writeObjectBegin(serializer);
//1、class name
writeString(serializer, classNameKey, call.getClassName());
//2、alias
writeString(serializer, aliasKey, call.getAlias());
//3、method name
writeString(serializer, methodNameKey, call.getMethodName());
//4.argsType
//TODO 应该根据泛型变量来决定是否要参数类型
if (call.isCallback()) {
//回调需要写上实际的参数类型
write(serializer, argsTypeKey, call.computeArgsType(), AFTER);
}
//5、args
writeArgs(serializer, call);
//7、attachments
write(serializer, attachmentsKey, call.getAttachments(), true, BEFORE);
writeObjectEnd(serializer);
}
}
@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('}');
}
}
@Override
public void write(final JSONSerializer serializer, final Object object, final Object fieldName,
final Type fieldType, final int features) {
if (object == null) {
serializer.writeNull();
} else {
writeObjectBegin(serializer);
ResponsePayload payload = (object instanceof ResponseMessage ? ((ResponseMessage<ResponsePayload>) object).getPayLoad() : (ResponsePayload) object);
if (payload != null) {
Throwable exception = payload.getException();
Object response = payload.getResponse();
if (response != null) {
write(serializer, RES_CLASS, getTypeName(response, payload.getType()), AFTER);
write(serializer, RESPONSE, response, NONE);
} else if (exception != null) {
write(serializer, RES_CLASS, getCanonicalName(exception.getClass()), AFTER);
write(serializer, EXCEPTION, exception, NONE);
}
}
writeObjectEnd(serializer);
}
}
/**
* 可以允许指定一些过滤字段进行生成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());
}
/**
* 对象转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();
}
}
@Override
public boolean apply(JSONSerializer serializer, Object source, String name) {
if (source == null) {
return true;
}
if (clazz != null && !clazz.isInstance(source)) {
return true;
}
if (this.excludes.contains(name)) {
return false;
}
return includes.size() == 0 || includes.contains(name);
}
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();
}
}
public boolean apply(JSONSerializer serializer, Object source, String name)
{
if (source == null)
{
return true;
}
if (clazz != null && !clazz.isInstance(source))
{
return true;
}
if (this.excludes.contains(name))
{
return false;
}
if (includes.size() == 0 || includes.contains(name))
{
return true;
}
return false;
}
/**
* 将一个包含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 boolean apply(JSONSerializer serializer, Object source, String name) {
if (source == null) {
return true;
}
if (clazz != null && !clazz.isInstance(source)) {
return true;
}
if (excludes.size() == 0 || !excludes.contains(name)) {
return true;
}
return false;
}
@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());
}
/**
* 可以允许指定一些过滤字段进行生成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 {
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 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();
}
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features)
throws IOException {
if (object == null) {
serializer.writeNull();
return;
}
InetAddress address = (InetAddress) object;
// 优先使用name
serializer.write(address.getHostName());
}
/**
* 写值
*
* @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);
}
}
@Test
public void testRbRecordCodec() throws IOException {
Record record = EntityHelper.forNew(EntityHelper.User, UserService.SYSTEM_USER);
RbRecordCodec.instance.write(new JSONSerializer(), record, null, null, 0);
Map<String, Object> map = new HashMap<>();
map.put("fieldName2", record);
System.out.println(JSON.toJSONString(map));
}
@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);
}
/**
* @param serializer
* @param object
* @param fieldName
* @param fieldType
* @param features
* @throws IOException
* @author tanyaowu
*/
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
if (object == null) {
serializer.out.writeNull();
return;
}
Record record = (Record) object;
Map<String, Object> map = record.getColumns();
serializer.write(map);
}