3
回答
fastJson能不能将int类型转换为String类型呢
【腾讯云】学生服务器套餐10元/月 >>>   
public class Student {
	private int id;
	private String name;
	private int age;
	private String pass;
	//省略getter和setter
        ...
}

当我们解析时,能不能将
{"age":22,"id":1,"name":"nn"} 
转换为
{"age":"22","id":"1","name":"nn"}
呢?

一般我采用注解的方式,在实体类中定义注解和时间格式的制定等。



举报
杨黎
发帖于3年前 3回/3K+阅
共有3个答案 最后回答: 3年前

引用来自“歇蹩虎子”的评论

public static final String toJSON( Object object) {
SerializeWriter out = new SerializeWriter();
try {
//此处必须new一个SerializeConfig,防止修改默认的配置
JSONSerializer serializer = new JSONSerializer(out, new SerializeConfig());
serializer.getMapping().put(int.class, intSerializer);
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}

用一个新的序列化类替代默认的就行.

序列化类里面直接out.writeString();



/**
 * json特殊操作
 * <p>
 *
 * @author 宋汝波
 * @date 2014年11月24日
 * @version 1.0.0
 */
public class JsonUtil {
	private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);
	/**
	 * 对序列化的Long类型进行特殊处理,避免位数过大导致和js精度的丢失,只用于向页面发送json数据时使用
	 */
	static ObjectSerializer longSerializer = new ObjectSerializer() {

		@Override
		public void write( JSONSerializer serializer, Object object, Object fieldName, Type fieldType )
			throws IOException {
			SerializeWriter out = serializer.getWriter();
			if ( object == null ) {
				if ( out.isEnabled(SerializerFeature.WriteNullNumberAsZero) ) {
					out.write('0');
				} else {
					out.writeNull();
				}
				return;
			}
			out.writeString(object.toString());
		}

	};


	/**
	 * 对Long型兼容js的json串
	 * <p>
	 *
	 * @param object
	 *            对象
	 * @return json字符串
	 */
	public static final String toCompatibleJSON( Object object, String format ) {
		SerializeWriter out = new SerializeWriter();
		try {
			//此处必须new一个SerializeConfig,防止修改默认的配置
			JSONSerializer serializer = new JSONSerializer(out, new SerializeConfig());
			serializer.getMapping().put(Long.class, longSerializer);
			if ( format != null ) {
				serializer.getMapping().put(Date.class, new SimpleDateFormatSerializer(format));
			}
			serializer.write(object);
			return out.toString();
		} finally {
			out.close();
		}
	}


	public static final String toCompatibleJSON( Object object ) {
		return toCompatibleJSON(object, null);
	}


	public static void main( String[] args ) {
		logger.debug(toCompatibleJSON(new Date(), "yyyy-MM-dd"));
		logger.debug(toCompatibleJSON(new Date(), null));
	}
}



public static final String toJSON( Object object) {
SerializeWriter out = new SerializeWriter();
try {
//此处必须new一个SerializeConfig,防止修改默认的配置
JSONSerializer serializer = new JSONSerializer(out, new SerializeConfig());
serializer.getMapping().put(int.class, intSerializer);
serializer.write(object);
return out.toString();
} finally {
out.close();
}
}

用一个新的序列化类替代默认的就行.

序列化类里面直接out.writeString();



--- 共有 1 条评论 ---
杨黎请问是从源码上修改吗? 还有intSerializer是什么啊? 3年前 回复

重写该属性的get方法 public String getId(){return id.toString()}。

即使是写成数字类型也不影响呀,你客户端解析的时候使用getString方法不就得到一个字符串对象了吗?

顶部