posts - 33,  comments - 17,  trackbacks - 0
            1// 生成JSON字符串工具
            2import java.util.ArrayList;
            3import java.util.Iterator;
            4import java.util.LinkedHashMap;
            5import java.util.List;
            6import java.util.Map;
            7
            8/**
            9 * JSON utility class
           10 *
           11 * @since 2008-04-21
           12 */

           13public class Json {
           14
           15    // test
           16    public static void main(String[] args) {
           17        Json json1 = new Json();
           18        json1.add("totalCount"2);
           19        json1.add("isTest"true);
           20        
           21        Json json_a = new Json();
           22        json_a.add("menuid"1);
           23        json_a.add("menuname""testmenu");
           24        json1.add("topics", json_a);
           25        
           26        Json json_b = new Json();
           27        json_b.add("menuid"2);
           28        json_b.add("menuname""testmenu");
           29        json1.add("topics", json_b);
           30        System.out.println(json1.toString());
           31    }

           32
           33    private Map map = new LinkedHashMap();
           34
           35    /**
           36     * 添加一個 JSON 屬性,值為一個字符串,重復添加時產生數組<p/>
           37     * 
           38     * add("name", "value");<br/>
           39     * 添加一個字符串,產生的 JSON 如:{"name":"value"}<p/>
           40     * 
           41     * add("name", "value1");<br/>
           42     * add("name", "value2");<br/>
           43     * 添加兩個同屬性的字符串,產生的 JSON 如:{"name":["value1", "value2"]}<p/>
           44     * 
           45     * @param key       JSON 屬性名
           46      * @param str       字符串格式的屬性值
           47      */

           48    public void add(String key, String value) {
           49        addElement(key, value);
           50    }

           51    
           52    public void add(String key, int num) {
           53        addElement(key, new Integer(num));
           54    }

           55    
           56    public void add(String key, boolean b) {
           57        addElement(key, new Boolean(b));
           58    }

           59
           60    /**
           61     * 添加一個 JSON 屬性,值為一個 JSON,重復添加時產生 JSON 數組<p/>
           62     * 
           63     * Json json1 = new Json();<br/>
           64     * json1.add("name1", "value1");<br/>
           65     * json1.add("name2", "value2");<br/>
           66     * Json json = new Json();<br/>
           67     * json.add("message", json1);<br/>
           68     * 添加一個 JSON,產生的 JSON 如:{"message":{"name1":"value1", "name2":"value2"}}<p/>
           69     * 
           70     * Json json1 = new Json();<br/>
           71     * json1.add("name1", "value1");<br/>
           72     * json1.add("name2", "value2");<br/>
           73     * Json json2 = new Json();<br/>
           74     * json2.add("name1", "value3");<br/>
           75     * json2.add("name2", "value4");<br/>
           76     * Json json = new Json();<br/>
           77     * json.add("message", json1);<br/>
           78     * json.add("message", json2);<br/>
           79     * 添加兩個同屬性的 JSON,產生的 JSON 如:{"message":[{"name1":"value1", "name2":"value2"}, {"name1":"value3", "name2":"value4"}]}<p/>
           80     * 
           81     * @param key       JSON 屬性名
           82      * @param json      JSON 格式的屬性值
           83      */

           84    public void add(String key, Json json) {
           85        addElement(key, json);
           86    }

           87
           88    public String toString() {
           89        StringBuilder sb = new StringBuilder();
           90        sb.append("{");
           91        int k = 0;
           92        for (Iterator i = map.keySet().iterator(); i.hasNext();) {
           93            String key = (String)(i.next());
           94            Object obj = map.get(key);
           95            if (k > 0{
           96                sb.append(",");
           97            }

           98            appendKey(sb, key);
           99            if (obj instanceof String) {
          100                appendString(sb, (String)obj);
          101            }
           else if (obj instanceof List) {
          102                appendList(sb, (List)obj);
          103            }
           else if (obj instanceof Json) {
          104                appendJson(sb, (Json)obj);
          105            }
           else {
          106                appendOther(sb, obj);
          107            }

          108            k++;
          109        }

          110        sb.append("}");
          111        return sb.toString();
          112    }

          113
          114    private void addElement(String key, Object obj) {
          115        if (!map.containsKey(key)) {
          116            if(obj instanceof Json) {
          117                List list = new ArrayList();
          118                list.add(obj);
          119                map.put(key, list);
          120            }
           else {
          121                map.put(key, obj);
          122            }

          123            return;
          124        }

          125
          126        Object o = map.remove(key);
          127
          128        if (o instanceof List) {
          129            ((List)o).add(obj);
          130            map.put(key, o);
          131            return;
          132        }

          133
          134        // o is a String
          135        List list = new ArrayList();
          136        list.add(o);
          137        list.add(obj);
          138        map.put(key, list);
          139    }

          140
          141    /**
          142     * Append JSON property name
          143     * 
          144     * @param sb
          145     * @param key
          146     */

          147    private void appendKey(StringBuilder sb, String key) {
          148        sb.append("\"").append(key).append("\":");
          149    }

          150
          151    /**
          152     * Append JSON property value that is a String
          153     * 
          154     * @param sb
          155     * @param str
          156     */

          157    private void appendString(StringBuilder sb, String str) {
          158        sb.append("\"").append(str).append("\"");
          159    }

          160    
          161    /**
          162     * Append JSON property value that is a Integer
          163     * 
          164     * @param sb
          165     * @param num
          166     */

          167    private void appendOther(StringBuilder sb, Object obj) {
          168        sb.append(obj);
          169    }

          170
          171    /**
          172     * Append JSON property value that is a List
          173     * 
          174     * @param sb
          175     * @param list
          176     */

          177    private void appendList(StringBuilder sb, List list) {
          178        sb.append("[");
          179        for (int j = 0, m = list.size(); j < m; j++{
          180            if (j > 0{
          181                sb.append(",");
          182            }

          183            Object obj = list.get(j);
          184            if (obj instanceof String) {
          185                appendString(sb, (String)obj);
          186            }
           else if (obj instanceof Json) {
          187                appendJson(sb, (Json)obj);
          188            }
           else {
          189                appendOther(sb, obj);
          190            }

          191        }

          192        sb.append("]");
          193    }

          194
          195    /**
          196     * Append JSON property value that is a JSON
          197     * 
          198     * @param sb
          199     * @param json
          200     */

          201    private void appendJson(StringBuilder sb, Json json) {
          202        sb.append(json.toString());
          203    }

          204}

          205
          posted on 2008-07-23 17:22 scea2009 閱讀(4961) 評論(2)  編輯  收藏

          FeedBack:
          # re: 生成 JSON 字符串的工具
          2013-07-27 12:05 | 11112dacda
          12121  回復  更多評論
            
          # re: 生成 JSON 字符串的工具
          2013-09-12 13:49 | hls
          ddddddddd  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          PL/SQL存儲過程與函數

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 芷江| 娄底市| 阳东县| 马边| 临夏市| 婺源县| 伊金霍洛旗| 韩城市| 永康市| 安义县| 建始县| 榆中县| 涞源县| 慈溪市| 桐城市| 肥城市| 芜湖市| 故城县| 高雄市| 浪卡子县| 蒙自县| 远安县| 永嘉县| 大方县| 平和县| 彭阳县| 天长市| 波密县| 太仆寺旗| 东方市| 泊头市| 黄石市| 清远市| 格尔木市| 祁门县| 石台县| 万宁市| 英山县| 龙门县| 奇台县| 陵川县|