手写List转换成Json

手写List转换成Json
完全自己想法,也是初来乍到,若有不足之处,请多多指教。Thanks

废话不多说,程序猿就喜欢代码

那么久直接来代码吧!!!!!!!!!!!!!!!!!!!!

package work;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.alibaba.fastjson.JSONObject;

public class JsonUtils<T> {

    private static final String COLON = "\"";
    private static final String COLON_MARK = "\":";

    public static void main(String[] args) throws Exception {
        List<Object> list = new ArrayList<>();
        list.add(new Person("Kang", 18));
        list.add(new Person("Kang", 18));
        list.add(new Person("Kang", 18));
        list.add("kang");
        Map map = new HashMap();
        map.put("abc", "123");
        map.put("Kang", new Person("Kang", 18));
        list.add(map);

        // Using alibaba JSONObject compare to myself result
        String jsonString = JSONObject.toJSONString(list);
        System.out.println(jsonString);

        // I design list parse to json string
        String parseListToJson = new JsonUtils<Object>().parseListToJson(list);
        System.out.println(parseListToJson);
    }

    @SuppressWarnings("unchecked")
    public String parseBeanToJson(T t) throws Exception {
        if (t == null) {
            return "";
        }

        String jsonStr = "{";
        Class<? extends Object> clazz = t.getClass();

        if (isBasics(clazz) || clazz == String.class) {
            return COLON + t.toString() + COLON;
        }

        if (clazz.isAssignableFrom(HashMap.class)) {
            Map m = (Map)t;
            Set keySet = m.keySet();

            int i = 0;
            for (Object object : keySet) {
                jsonStr = jsonStr +  COLON + object + COLON_MARK;
                jsonStr += parseBeanToJson((T) m.get(object));

                jsonStr = addComma(i, keySet.size(), jsonStr)  != null ? addComma(i, keySet.size(), jsonStr) : jsonStr;

                i++;
            }

            jsonStr += "}";

            return jsonStr;
        }

        Field[] declaredFields = clazz.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            Field field = declaredFields[i];
            jsonStr += COLON + field.getName() + COLON_MARK;
            field.setAccessible(true);

            if (List.class == field.getType()) {
                jsonStr += parseListToJson((T) field.get(t));
            } else if (String.class == field.getType()) {
                String value = field.get(t).toString();
                jsonStr += COLON + value + COLON;
            } else if (isBasics(field.getType())) {
                String value = field.get(t).toString();
                jsonStr += value;
            }

            jsonStr = addComma(i, declaredFields.length, jsonStr)  != null ? addComma(i, declaredFields.length, jsonStr) : jsonStr;
        }

        jsonStr += "}";
        return jsonStr;
    }

    public String parseListToJson(T t) throws Exception {
        if (t == null) {
            return "";
        }

        String jsonStr = "[";
        List list = (List) t;

        for (int j = 0; j < list.size(); j++) {
            String subJson = parseBeanToJson((T) list.get(j));
            jsonStr += subJson;

            jsonStr = addComma(j, list.size(), jsonStr)  != null ? addComma(j, list.size(), jsonStr) : jsonStr;
        }

        jsonStr += "]";
        return jsonStr;
    }

    private String addComma(int i, int size, String jsonStr) {
        if (i < size - 1) {
           return jsonStr += ",";
        }

        return null;
    }

    private boolean isBasics(Class<?> type) {
        if (type == int.class || type == byte.class || type == short.class || type == long.class || type == float.class
                || type == double.class || type == char.class || type == boolean.class) {
            return true;
        } else {
            return false;
        }
    }
}

class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值