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 属性,值为一个字符串,重复添加时产生数组
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());
}
}