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 阅读(4954) 评论(2)  编辑  收藏

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

只有注册用户登录后才能发表评论。


网站导航:
 

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(1)

随笔分类

随笔档案

PL/SQL存储过程与函数

搜索

  •  

最新评论

阅读排行榜

评论排行榜