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}