/src/test/java/com/alibaba/json/test/codec/FastjsonManualCodec.java

https://github.com/alibaba/fastjson · Java · 188 lines · 137 code · 48 blank · 3 comment · 3 complexity · 3bf5e844c9154f93e8d7d6915dd30b2f MD5 · raw file

  1. package com.alibaba.json.test.codec;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.lang.reflect.Type;
  5. import java.util.Collection;
  6. import java.util.List;
  7. import com.alibaba.fastjson.JSON;
  8. import com.alibaba.fastjson.parser.DefaultJSONParser;
  9. import com.alibaba.fastjson.parser.Feature;
  10. import com.alibaba.fastjson.parser.ParserConfig;
  11. import com.alibaba.fastjson.serializer.JSONSerializer;
  12. import com.alibaba.fastjson.serializer.ObjectSerializer;
  13. import com.alibaba.fastjson.serializer.SerializeConfig;
  14. import com.alibaba.fastjson.serializer.SerializeWriter;
  15. import com.alibaba.fastjson.serializer.SerializerFeature;
  16. import data.media.Image;
  17. import data.media.Media;
  18. import data.media.MediaContent;
  19. public class FastjsonManualCodec implements Codec {
  20. private ParserConfig config = new ParserConfig();
  21. private SerializeConfig serializeConfig = new SerializeConfig();
  22. public FastjsonManualCodec(){
  23. System.out.println("fastjson-" + JSON.VERSION);
  24. serializeConfig.put(MediaContent.class, new MediaContentSerializer());
  25. }
  26. public String getName() {
  27. return "fastjson-manual";
  28. }
  29. public <T> T decodeObject(String text, Class<T> clazz) {
  30. DefaultJSONParser parser = new DefaultJSONParser(text, config);
  31. parser.config(Feature.DisableCircularReferenceDetect, true);
  32. return parser.parseObject(clazz);
  33. }
  34. public <T> Collection<T> decodeArray(String text, Class<T> clazz) throws Exception {
  35. DefaultJSONParser parser = new DefaultJSONParser(text, config);
  36. parser.config(Feature.DisableCircularReferenceDetect, true);
  37. return parser.parseArray(clazz);
  38. }
  39. public final Object decodeObject(String text) {
  40. DefaultJSONParser parser = new DefaultJSONParser(text, config);
  41. parser.config(Feature.DisableCircularReferenceDetect, true);
  42. return parser.parse();
  43. }
  44. public final Object decode(String text) {
  45. DefaultJSONParser parser = new DefaultJSONParser(text, config);
  46. parser.config(Feature.DisableCircularReferenceDetect, true);
  47. return parser.parse();
  48. }
  49. // private JavaBeanSerializer serializer = new JavaBeanSerializer(Long_100_Entity.class);
  50. public String encode(Object object) throws Exception {
  51. SerializeWriter out = new SerializeWriter();
  52. out.config(SerializerFeature.DisableCircularReferenceDetect, true);
  53. JSONSerializer serializer = new JSONSerializer(out, serializeConfig);
  54. serializer.write(object);
  55. String text = out.toString();
  56. out.close();
  57. return text;
  58. }
  59. @SuppressWarnings("unchecked")
  60. public <T> T decodeObject(byte[] input, Class<T> clazz) throws Exception {
  61. return (T) JSON.parseObject(input, clazz, Feature.DisableCircularReferenceDetect);
  62. }
  63. public static class ImageSerializer implements ObjectSerializer {
  64. @Override
  65. public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
  66. int features) throws IOException {
  67. Image image = (Image) object;
  68. SerializeWriter out = serializer.out;
  69. out.writeFieldValue('{', "height", image.getHeight());
  70. out.writeFieldValueStringWithDoubleQuote(',', "size", image.getSize().name());
  71. String tile = image.getTitle();
  72. out.writeFieldValueStringWithDoubleQuoteCheck(',', "title", tile);
  73. out.writeFieldValueStringWithDoubleQuoteCheck(',', "uri", image.getUri());
  74. out.writeFieldValue(',', "width", image.getWidth());
  75. out.write('}');
  76. // TODO
  77. }
  78. }
  79. public static class MediaSerializer implements ObjectSerializer {
  80. @Override
  81. public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
  82. int features) throws IOException {
  83. Media image = (Media) object;
  84. SerializeWriter out = serializer.out;
  85. out.writeFieldValue('{', "bitrate", image.getBitrate());
  86. out.writeFieldValue(',', "duration", image.getDuration());
  87. out.writeFieldValue(',', "height", image.getHeight());
  88. String format = image.getFormat();
  89. out.writeFieldValueStringWithDoubleQuoteCheck(',', "format", format);
  90. out.writeFieldValue(',', "size", image.getSize());
  91. out.writeFieldValue(',', "height", image.getHeight());
  92. List<String> persons = image.getPersons();
  93. out.writeFieldName("persons");
  94. out.write(persons);
  95. out.writeFieldValueStringWithDoubleQuote(',', "player", image.getPlayer().name());
  96. out.writeFieldValue(',', "size", image.getSize());
  97. String title = image.getTitle();
  98. out.writeFieldValue(',', "title", title);
  99. String uri = image.getUri();
  100. out.writeFieldValueStringWithDoubleQuoteCheck(',', "uri", uri);
  101. out.writeFieldValue(',', "width", image.getWidth());
  102. out.write('}');
  103. }
  104. }
  105. public static class MediaContentSerializer implements ObjectSerializer {
  106. MediaSerializer mediaSer = new MediaSerializer();
  107. ImageSerializer imageSer = new ImageSerializer();
  108. @Override
  109. public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
  110. int features) throws IOException {
  111. MediaContent mediaContent = (MediaContent) object;
  112. SerializeWriter out = serializer.out;
  113. out.write('{');
  114. out.writeFieldName("image", false);
  115. List<Image> images = mediaContent.images;
  116. out.write('[');
  117. for (int i = 0, size = images.size(); i < size; ++i) {
  118. if (i != 0) {
  119. out.write(',');
  120. }
  121. Image image = images.get(i);
  122. imageSer.write(serializer, image, Integer.valueOf(i), Image.class, features);
  123. }
  124. out.write(']');
  125. out.write(',');
  126. out.writeFieldName("media", false);
  127. mediaSer.write(serializer, mediaContent.media, "media", Media.class, features);
  128. out.write('}');
  129. }
  130. }
  131. @Override
  132. public byte[] encodeToBytes(Object object) throws Exception {
  133. // TODO Auto-generated method stub
  134. return null;
  135. }
  136. @Override
  137. public void encode(OutputStream out, Object object) throws Exception {
  138. out.write(encodeToBytes(object));
  139. }
  140. }