免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4130 | 回复: 0
打印 上一主题 下一主题

生成 JSON 字符串的工具 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-30 10:31 |只看该作者 |倒序浏览
生成 JSON 字符串的工具
Java code
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* JSON utility class
*
* @since 2008-04-21
*/
public class Json {
    // test
    public static void main(String[] args) {
        Json json1 = new Json();
        json1.add("totalCount", 2);
        json1.add("isTest", true);
        
        Json json_a = new Json();
        json_a.add("menuid", 1);
        json_a.add("menuname", "testmenu");
        json1.add("topics", json_a);
        
        Json json_b = new Json();
        json_b.add("menuid", 2);
        json_b.add("menuname", "testmenu");
        json1.add("topics", json_b);
        System.out.println(json1.toString());
    }
    private Map map = new LinkedHashMap();
    /**
     * 添加一个 JSON 属性,值为一个字符串,重复添加时产生数组
     *
     * add("name", "value");
     * 添加一个字符串,产生的 JSON 如:{"name":"value"}
     *
     * add("name", "value1");
     * add("name", "value2");
     * 添加两个同属性的字符串,产生的 JSON 如:{"name":["value1", "value2"]}
     *
     * @param key       JSON 属性名
      * @param str       字符串格式的属性值
      */
    public void add(String key, String value) {
        addElement(key, value);
    }
   
    public void add(String key, int num) {
        addElement(key, new Integer(num));
    }
   
    public void add(String key, boolean b) {
        addElement(key, new Boolean(b));
    }
    /**
     * 添加一个 JSON 属性,值为一个 JSON,重复添加时产生 JSON 数组
     *
     * Json json1 = new Json();
     * json1.add("name1", "value1");
     * json1.add("name2", "value2");
     * Json json = new Json();
     * json.add("message", json1);
     * 添加一个 JSON,产生的 JSON 如:{"message":{"name1":"value1", "name2":"value2"}}
     *
     * Json json1 = new Json();
     * json1.add("name1", "value1");
     * json1.add("name2", "value2");
     * Json json2 = new Json();
     * json2.add("name1", "value3");
     * json2.add("name2", "value4");
     * Json json = new Json();
     * json.add("message", json1);
     * json.add("message", json2);
     * 添加两个同属性的 JSON,产生的 JSON 如:{"message":[{"name1":"value1", "name2":"value2"}, {"name1":"value3", "name2":"value4"}]}
     *
     * @param key       JSON 属性名
      * @param json      JSON 格式的属性值
      */
    public void add(String key, Json json) {
        addElement(key, json);
    }
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        int k = 0;
        for (Iterator i = map.keySet().iterator(); i.hasNext();) {
            String key = (String)(i.next());
            Object obj = map.get(key);
            if (k > 0) {
                sb.append(",");
            }
            appendKey(sb, key);
            if (obj instanceof String) {
                appendString(sb, (String)obj);
            } else if (obj instanceof List) {
                appendList(sb, (List)obj);
            } else if (obj instanceof Json) {
                appendJson(sb, (Json)obj);
            } else {
                appendOther(sb, obj);
            }
            k++;
        }
        sb.append("}");
        return sb.toString();
    }
    private void addElement(String key, Object obj) {
        if (!map.containsKey(key)) {
            if(obj instanceof Json) {
                List list = new ArrayList();
                list.add(obj);
                map.put(key, list);
            } else {
                map.put(key, obj);
            }
            return;
        }
        Object o = map.remove(key);
        if (o instanceof List) {
            ((List)o).add(obj);
            map.put(key, o);
            return;
        }
        // o is a String
        List list = new ArrayList();
        list.add(o);
        list.add(obj);
        map.put(key, list);
    }
    /**
     * Append JSON property name
     *
     * @param sb
     * @param key
     */
    private void appendKey(StringBuilder sb, String key) {
        sb.append("\"").append(key).append("\":");
    }
    /**
     * Append JSON property value that is a String
     *
     * @param sb
     * @param str
     */
    private void appendString(StringBuilder sb, String str) {
        sb.append("\"").append(str).append("\"");
    }
   
    /**
     * Append JSON property value that is a Integer
     *
     * @param sb
     * @param num
     */
    private void appendOther(StringBuilder sb, Object obj) {
        sb.append(obj);
    }
    /**
     * Append JSON property value that is a List
     *
     * @param sb
     * @param list
     */
    private void appendList(StringBuilder sb, List list) {
        sb.append("[");
        for (int j = 0, m = list.size(); j  m; j++) {
            if (j > 0) {
                sb.append(",");
            }
            Object obj = list.get(j);
            if (obj instanceof String) {
                appendString(sb, (String)obj);
            } else if (obj instanceof Json) {
                appendJson(sb, (Json)obj);
            } else {
                appendOther(sb, obj);
            }
        }
        sb.append("]");
    }
    /**
     * Append JSON property value that is a JSON
     *
     * @param sb
     * @param json
     */
    private void appendJson(StringBuilder sb, Json json) {
        sb.append(json.toString());
    }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/59737/showart_1096642.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP