모든 데이터 형식을 Json 형식으로 변환하는 JsonUtils 클래스

10207 단어 json
 

 

 

package json;

import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JsonUtils
{

    public static void main(String[] args)
    {
        String s = "a\\b\\c/d,ef,g";
        String json = "";
        json = stringToJson(s);

        System.out.println(json);

        TestBean bean = new TestBean();
        bean.setId(1);
        bean.setName("nnname");
        bean.setDesc("desc");

        json = objectToJson(bean);
        System.out.println("objectToJson:" + json);

        json = beanToJson(bean);
        System.out.println("beanToJson:" + json);

        List<TestBean> list = new ArrayList<TestBean>();
        list.add(new TestBean(1, "n1", "d1"));
        list.add(new TestBean(2, "n2", "d2"));
        list.add(new TestBean(3, "n3", "d3"));
        json = listToJson(list);
        System.out.println("listToJson:" + json);

    }

    public static String stringToJson(String s)
    {
        if (s == null)
        {
            return nullToJson();
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++)
        {
            char ch = s.charAt(i);
            switch (ch)
            {
            case '"':
                sb.append("\\\"");
                break;
            case '\\':
                sb.append("\\\\");
                break;
            case '\b':
                sb.append("\\b");
                break;
            case '\f':
                sb.append("\\f");
                break;
            case '
': sb.append("\
"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; case '/': sb.append("\\/"); break; default: if (ch >= '\u0000' && ch <= '\u001F') { String ss = Integer.toHexString(ch); sb.append("\\u"); for (int k = 0; k < 4 - ss.length(); k++) { sb.append('0'); } sb.append(ss.toUpperCase()); } else { sb.append(ch); } } } return sb.toString(); } public static String nullToJson() { return ""; } public static String objectToJson(Object obj) { StringBuilder json = new StringBuilder(); if (obj == null) { json.append("\"\""); } else if (obj instanceof Number) { json.append(numberToJson((Number) obj)); } else if (obj instanceof Boolean) { json.append(booleanToJson((Boolean) obj)); } else if (obj instanceof String) { json.append("\"").append(stringToJson(obj.toString())).append("\""); } else if (obj instanceof Object[]) { json.append(arrayToJson((Object[]) obj)); } else if (obj instanceof List) { json.append(listToJson((List<?>) obj)); } else if (obj instanceof Map) { json.append(mapToJson((Map<?, ?>) obj)); } else if (obj instanceof Set) { json.append(setToJson((Set<?>) obj)); } else { json.append(beanToJson(obj)); } return json.toString(); } public static String numberToJson(Number number) { return number.toString(); } public static String booleanToJson(Boolean bool) { return bool.toString(); } /** */ /** */ /** */ /** * @param bean * bean * @return String */ public static String beanToJson(Object bean) { StringBuilder json = new StringBuilder(); json.append("{"); PropertyDescriptor[] props = null; try { props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors(); } catch (IntrospectionException e) { } if (props != null) { for (int i = 0; i < props.length; i++) { try { String name = objectToJson(props[i].getName()); String value = objectToJson(props[i].getReadMethod().invoke(bean)); json.append(name); json.append(":"); json.append(value); json.append(","); } catch (Exception e) { } } json.setCharAt(json.length() - 1, '}'); } else { json.append("}"); } return json.toString(); } /** */ /** */ /** */ /** * @param list * list * @return String */ public static String listToJson(List<?> list) { StringBuilder json = new StringBuilder(); json.append("["); if (list != null && list.size() > 0) { for (Object obj : list) { json.append(objectToJson(obj)); json.append(","); } json.setCharAt(json.length() - 1, ']'); } else { json.append("]"); } return json.toString(); } /** */ /** */ /** */ /** * @param array * * @return String */ public static String arrayToJson(Object[] array) { StringBuilder json = new StringBuilder(); json.append("["); if (array != null && array.length > 0) { for (Object obj : array) { json.append(objectToJson(obj)); json.append(","); } json.setCharAt(json.length() - 1, ']'); } else { json.append("]"); } return json.toString(); } /** */ /** */ /** */ /** * @param map * map * @return String */ public static String mapToJson(Map<?, ?> map) { StringBuilder json = new StringBuilder(); json.append("{"); if (map != null && map.size() > 0) { for (Object key : map.keySet()) { json.append(objectToJson(key)); json.append(":"); json.append(objectToJson(map.get(key))); json.append(","); } json.setCharAt(json.length() - 1, '}'); } else { json.append("}"); } return json.toString(); } /** */ /** */ /** */ /** * @param set * * @return String */ public static String setToJson(Set<?> set) { StringBuilder json = new StringBuilder(); json.append("["); if (set != null && set.size() > 0) { for (Object obj : set) { json.append(objectToJson(obj)); json.append(","); } json.setCharAt(json.length() - 1, ']'); } else { json.append("]"); } return json.toString(); } } ------------------ stringToJson:a\\b\\c\/d,ef,g objectToJson:{"desc":"desc","id":1,"name":"nnname"} beanToJson:{"desc":"desc","id":1,"name":"nnname"} listToJson:[{"desc":"d1","id":1,"name":"n1"},{"desc":"d2","id":2,"name":"n2"},{"desc":"d3","id":3,"name":"n3"}]

좋은 웹페이지 즐겨찾기