package com.venky.swf.db.model.io.json; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.json.simple.JSONArray; import org.json.simple.JSONObject; /** * Created by venky on 11/5/16. */ public class JSONFormatter { public JSONFormatter(){ this(2); } public JSONFormatter(int spacing){ SPACES=spacing; } public void writePrettyJsonArray(JSONArray jsonArray, Writer w) throws IOException{ w.append("["); for (int i = 0 ; i < jsonArray.size() ; i ++ ){ Object o = jsonArray.get(i); if (i > 0){ w.append(","); } writeObject(o, w); } w.append("]"); } public void writePrettyJson(JSONObject obj,Writer w) throws IOException{ w.append("{"); writeAttributes(obj,w); w.append("}"); } private int indent = 0; private int SPACES = 2; private void indent(Writer w) throws IOException{ indent += SPACES; for (int i = 0 ; i< indent ; i ++){ w.append(" "); } } private void backIndent(Writer w) throws IOException { indent -=SPACES; } private void writeObject(Object o ,Writer w) throws IOException{ if (o instanceof JSONObject){ writePrettyJson((JSONObject)o, w); }else if (o instanceof JSONArray){ writePrettyJsonArray((JSONArray)o, w); }else { w.append('"').append(JSONObject.escape(o.toString())).append("\""); } } private void writeAttributes(JSONObject obj, Writer w) throws IOException { boolean first = true; List<String> keys = new ArrayList<String>(); keys.addAll(obj.keySet()); Collections.sort(keys); for (Object k : keys){ Object v = obj.get(k); w.append("\n"); indent(w); if (!first) { w.append(","); }else { first=false; } w.append("\"").append(JSONObject.escape(k.toString())).append("\" : "); if (v instanceof JSONObject){ writePrettyJson((JSONObject)v, w); }else if (v instanceof JSONArray) { writePrettyJsonArray((JSONArray)v, w); }else { w.append('"').append(JSONObject.escape(v.toString())).append("\""); } backIndent(w); } w.append("\n"); backIndent(w); indent(w); } }