package com.alibaba.json.bvt.compatible.jsonlib; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer; import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; public class CompatibleTest_noasm extends TestCase { protected void setUp() throws Exception { System.out.println(); } public void test_0() throws Exception { Map<String, Object> obj = new HashMap<String, Object>(); assertEquals(toCompatibleJSONString(obj), toJSONLibString(obj)); } public void test_1() throws Exception { VO vo = new VO(); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_2() throws Exception { V1 vo = new V1(); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } // {"media":{"size":58982400,"format":"video/mpg4","uri":"http://javaone.com/keynote.mpg","title":"Javaone Keynote","width":640,"height":480,"duration":18000000,"bitrate":262144,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA"}{"images":[{"size":"LARGE","uri":"http://javaone.com/keynote_large.jpg","title":"Javaone Keynote","width":1024,"height":768},{"size":"SMALL","uri":"http://javaone.com/keynote_small.jpg","title":"Javaone Keynote","width":320,"height":240}]} public void test_3() throws Exception { V1 vo = new V1(); vo.setDate(new Date()); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_4() throws Exception { V1 vo = new V1(); vo.setF2('中'); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_5() throws Exception { V2 vo = new V2(); vo.setF2('中'); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_6() throws Exception { V2 vo = new V2(); vo.setF1(0.1f); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_7() throws Exception { V2 vo = new V2(); vo.setF2(0.1D); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_8() throws Exception { V3 vo = new V3(); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_9() throws Exception { V4 vo = new V4(); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_10() throws Exception { Object vo = null; assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public void test_11() throws Exception { Object vo = new HashMap(); assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo)); } public static void assertEquals(String fastJSON, String jsonLib) { System.out.println("fastjson: " + fastJSON); System.out.println("json-lib: " + jsonLib); Assert.assertEquals(JSON.parse(fastJSON), JSON.parse(jsonLib)); } private static final SerializeConfig mapping; static { mapping = new SerializeConfig(); mapping.setAsmEnable(false); mapping.put(Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式 } private static final SerializerFeature[] features = { SerializerFeature.WriteMapNullValue, // 输出空置字段 SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null }; // 序列化为和JSON-LIB兼容的字符串 public static String toCompatibleJSONString(Object object) { return JSON.toJSONString(object, mapping, features); } public static String toJSONLibString(Object object) { net.sf.json.JSONObject obj = net.sf.json.JSONObject.fromObject(object); return obj.toString(); } public static class V4 { private Map<String, Object> items; public Map<String, Object> getItems() { return items; } public void setItems(Map<String, Object> items) { this.items = items; } } public static class V3 { private List<String> items; public List<String> getItems() { return items; } public void setItems(List<String> items) { this.items = items; } } public static class V2 { private float f1; private double f2; private Float f3; private Double f4; public float getF1() { return f1; } public void setF1(float f1) { this.f1 = f1; } public double getF2() { return f2; } public void setF2(double f2) { this.f2 = f2; } public Float getF3() { return f3; } public void setF3(Float f3) { this.f3 = f3; } public Double getF4() { return f4; } public void setF4(Double f4) { this.f4 = f4; } } public static class V1 { private Boolean f1; private Character f2; private String f3; private Date date; private boolean f4; private char f5; public Boolean getF1() { return f1; } public void setF1(Boolean f1) { this.f1 = f1; } public Character getF2() { return f2; } public void setF2(Character f2) { this.f2 = f2; } public String getF3() { return f3; } public void setF3(String f3) { this.f3 = f3; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public boolean isF4() { return f4; } public void setF4(boolean f4) { this.f4 = f4; } public char getF5() { return f5; } public void setF5(char f5) { this.f5 = f5; } } public static class VO { private int id; private String name; private BigDecimal salary; private List<String> items; private Byte f1; private Short f2; private Integer f3; private Long f4; private BigInteger f5; private BigDecimal f6; private byte f7; private short f8; private int f9; private long f10; public Byte getF1() { return f1; } public void setF1(Byte f1) { this.f1 = f1; } public Short getF2() { return f2; } public void setF2(Short f2) { this.f2 = f2; } public Integer getF3() { return f3; } public void setF3(Integer f3) { this.f3 = f3; } public Long getF4() { return f4; } public void setF4(Long f4) { this.f4 = f4; } public BigInteger getF5() { return f5; } public void setF5(BigInteger f5) { this.f5 = f5; } public BigDecimal getF6() { return f6; } public void setF6(BigDecimal f6) { this.f6 = f6; } public byte getF7() { return f7; } public void setF7(byte f7) { this.f7 = f7; } public short getF8() { return f8; } public void setF8(short f8) { this.f8 = f8; } public int getF9() { return f9; } public void setF9(int f9) { this.f9 = f9; } public long getF10() { return f10; } public void setF10(long f10) { this.f10 = f10; } public BigDecimal getSalary() { return salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getItems() { return items; } public void setItems(List<String> items) { this.items = items; } } }