public class JsonHelper {
private static void appendKeyUnit(StringBuilder sb, String key) {
sb.append("\"");
sb.append(key);
sb.append("\"");
}
private static void appendValueUnit(StringBuilder sb, Object val) {
if (val instanceof Integer) {
sb.append(String.valueOf(((Integer)val).intValue()));
} else if (val instanceof String) {
appendKeyUnit(sb, val.toString());
} else if (val instanceof Map) {
String vStr = map2Json((Map<String, Object>)val);
sb.append(vStr);
} else if (val instanceof List) {
sb.append("[");
for (Object obj : (List<?>)val) {
appendValueUnit(sb, obj);
}
sb.deleteCharAt(sb.length() - 1); // remove the last comma
sb.append("]");
}
sb.append(",");
}
public static String map2Json(Map<String, Object> m) {
StringBuilder jsonBuf = new StringBuilder("{");
Set<String> kSet = m.keySet();
for (String k : kSet) {
Object v = m.get(k);
appendKeyUnit(jsonBuf, k);
jsonBuf.append(":");
appendValueUnit(jsonBuf, v);
}
jsonBuf.deleteCharAt(jsonBuf.length() - 1); // remove the last comma
jsonBuf.append("}");
return jsonBuf.toString();
}
}
The key of the Map must be a String. However, the value could be an Integer, a String, a Map or a List. The generic type of the List couldcountry be one of the four value type. The test code is as follows, but the content doesn't make any sense.
class JsonHelperTest
{
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "TaylorSwift");
Map<String, Object> submap = new HashMap<String, Object>();
submap.put("genre", "country music");
submap.put("age", 22);
map.put("career", submap);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
submap = new HashMap<String, Object>();
submap.put("career", "engineer");
list.add(submap);
submap = new HashMap<String, Object>();
submap.put("career", "music");
list.add(submap);
map.put("subcareer", submap);
map.put("company", list);
String json = JsonHelper.map2Json(map);
System.out.println(json);
}
}
The output is: {"subcareer":{"career":"music"},"company":[{"career":"engineer"},{"career":"music"}],"name":"TaylorSwift","career":{"genre":"country music","age":22}}