/*** ** @(#) TradeCard.com 1.0 ** ** Copyright (c) 2009 TradeCard, Inc. All Rights Reserved. ** ** ** THIS COMPUTER SOFTWARE IS THE PROPERTY OF TradeCard, Inc. ** ** Permission is granted to use this software as specified by the TradeCard ** COMMERCIAL LICENSE AGREEMENT. You may use this software only for ** commercial purposes, as specified in the details of the license. ** TRADECARD SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY ** THE LICENSEE AS A RESULT OF USING OR MODIFYING THIS SOFTWARE IN ANY WAY. ** ** YOU MAY NOT DISTRIBUTE ANY SOURCE CODE OR OBJECT CODE FROM THE TradeCard.com ** TOOLKIT AT ANY TIME. VIOLATORS WILL BE PROSECUTED TO THE FULLEST EXTENT ** OF UNITED STATES LAW. ** ** @version 1.0 ** @author Copyright (c) 2009 TradeCard, Inc. All Rights Reserved. ** **/ package com.partydj.util.json; import java.io.*; import java.util.*; /** * @author mrappazzo * * **/ public class SortedKeyJsonSerializer { /** * */ public SortedKeyJsonSerializer() { } public static void write(JSONObject json, Writer out) { JSONObject sorted = createSortedKeyJSON(json); writeJSON(json, out); } protected static JSONObject createSortedKeyJSON(JSONObject json) { if (json.delegate() instanceof SortedMap) { return json; } return JSONObject.newSortedKeyInstance(); } public static String writeToString(JSONObject json) { StringWriter writer = new StringWriter(); write(json, writer); return writer.toString(); } public static Writer writeJSON(JSONObject json, Writer writer) throws JSONException { try { boolean b = false; writer.write('{'); Iterator<Map.Entry<String, Object>> it = json.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, Object> entry = it.next(); writer.write(JSONObject.quote(entry.getKey())); writer.write(':'); Object value = entry.getValue(); if (value instanceof JSONObject) { writeJSON(createSortedKeyJSON((JSONObject)value), writer); } else if (value instanceof JSONArray) { ((JSONArray)value).write(writer); } else { JSONObject.valueToWriter(writer, value); } if (it.hasNext()) { writer.write(','); } } writer.write('}'); return writer; } catch (IOException e) { throw new JSONException(e); } finally { try { writer.flush(); } catch (Exception e) { throw new IllegalStateException("Cannot flush writer during json serialization.", e); } } } }