001package gudusoft.gsqlparser.util.json; 002 003import gudusoft.gsqlparser.dlineage.util.BeanUtil; 004 005import java.io.IOException; 006import java.io.Writer; 007import java.lang.reflect.Array; 008import java.util.ArrayList; 009import java.util.Collection; 010import java.util.List; 011 012public class JSONRender { 013 014 public String toJSONString(Object obj) { 015 return toJSONString(obj, false); 016 } 017 018 public String toJSONString(Object obj, boolean ignoreId) { 019 if (obj.getClass().isArray()) { 020 int size = Array.getLength(obj); 021 List<Object> arrayList = new ArrayList<>(size); 022 for (int i = 0; i < size; i++) { 023 arrayList.add(Array.get(obj, i)); 024 } 025 obj = arrayList; 026 } 027 028 if (obj instanceof Collection) { 029 List<Object> mappedList = new ArrayList<>(); 030 for (Object element : (Collection<?>) obj) { 031 mappedList.add(BeanUtil.bean2Map(element)); 032 } 033 return new JSONSerializer(ignoreId).serialize(mappedList); 034 } else { 035 return new JSONSerializer(ignoreId).serialize(BeanUtil.bean2Map(obj)); 036 } 037 } 038 039 public void toJSONString(Object obj, Writer writer) throws IOException { 040 toJSONString(obj, false, writer); 041 } 042 043 public void toJSONString(Object obj, boolean ignoreId, Writer writer) throws IOException { 044 if (obj.getClass().isArray()) { 045 int size = Array.getLength(obj); 046 List<Object> arrayList = new ArrayList<>(size); 047 for (int i = 0; i < size; i++) { 048 arrayList.add(Array.get(obj, i)); 049 } 050 obj = arrayList; 051 } 052 053 if (obj instanceof Collection) { 054 List<Object> mappedList = new ArrayList<>(); 055 for (Object element : (Collection<?>) obj) { 056 mappedList.add(BeanUtil.bean2Map(element)); 057 } 058 new JSONSerializer(ignoreId).serialize(mappedList, writer); 059 } else { 060 new JSONSerializer(ignoreId).serialize(BeanUtil.bean2Map(obj), writer); 061 } 062 } 063 064 private static class Holder { 065 private static final JSONRender INSTANCE = new JSONRender(); 066 } 067 068 public static JSONRender getInstance() { 069 return Holder.INSTANCE; 070 } 071 072 private JSONRender() { 073 } 074}