/* * $Id: JSONObject.java,v 1.2 2008-08-07 01:18:54 parg Exp $ * Created on 2006-4-10 */ package org.json.simple; import java.util.Iterator; import java.util.Map; import org.gudy.azureus2.core3.util.LightHashMap; /** * @author FangYidong<fangyidong@yahoo.com.cn> */ public class JSONObject extends LightHashMap<String,Object>{ public JSONObject() { super(); } public JSONObject(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor); } public JSONObject(int initialCapacity) { super(initialCapacity); } public JSONObject(Map<String,Object> arg0) { super(arg0); } public String toString(){ ItemList list=new ItemList(); Iterator<Map.Entry<String, Object>> iter=entrySet().iterator(); while(iter.hasNext()){ Map.Entry<String, Object> entry=iter.next(); list.add(toString(entry.getKey().toString(),entry.getValue())); } return "{"+list.toString()+"}"; } public void toString( StringBuilder sb ){ sb.append( "{" ); Iterator iter=entrySet().iterator(); boolean first = true; while(iter.hasNext()){ if ( first ){ first = false; }else{ sb.append( "," ); } Map.Entry entry=(Map.Entry)iter.next(); toString(sb, entry.getKey().toString(),entry.getValue()); } sb.append( "}" ); } public static String toString(String key,Object value){ StringBuffer sb=new StringBuffer(); sb.append("\""); sb.append(escape(key)); sb.append("\":"); if(value==null){ sb.append("null"); return sb.toString(); } if(value instanceof String){ sb.append("\""); sb.append(escape((String)value)); sb.append("\""); } else sb.append(value); return sb.toString(); } public static void toString(StringBuilder sb, String key,Object value){ sb.append("\""); escape(sb,key); sb.append("\":"); if(value==null){ sb.append("null"); return; } if(value instanceof String){ sb.append("\""); escape(sb,(String)value); sb.append("\""); }else if ( value instanceof JSONObject ){ ((JSONObject)value).toString( sb ); }else if ( value instanceof JSONArray ){ ((JSONArray)value).toString( sb ); }else{ sb.append(String.valueOf( value )); } } /** * " => \" , \ => \\ * @param s * @return */ public static String escape(String s){ if(s==null) return null; StringBuffer sb=new StringBuffer(); for(int i=0;i<s.length();i++){ char ch=s.charAt(i); switch(ch){ case '"': sb.append("\\\""); break; case '\\': sb.append("\\\\"); break; case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\n': sb.append("\\n"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; case '/': sb.append("\\/"); break; default: if(ch>='\u0000' && ch<='\u001F'){ String ss=Integer.toHexString(ch); sb.append("\\u"); for(int k=0;k<4-ss.length();k++){ sb.append('0'); } sb.append(ss.toUpperCase()); } else{ sb.append(ch); } } }//for return sb.toString(); } public static void escape(StringBuilder sb, String s){ if(s==null){ sb.append((String)null); }else{ for(int i=0;i<s.length();i++){ char ch=s.charAt(i); switch(ch){ case '"': sb.append("\\\""); break; case '\\': sb.append("\\\\"); break; case '\b': sb.append("\\b"); break; case '\f': sb.append("\\f"); break; case '\n': sb.append("\\n"); break; case '\r': sb.append("\\r"); break; case '\t': sb.append("\\t"); break; case '/': sb.append("\\/"); break; default: if(ch>='\u0000' && ch<='\u001F'){ String ss=Integer.toHexString(ch); sb.append("\\u"); for(int k=0;k<4-ss.length();k++){ sb.append('0'); } sb.append(ss.toUpperCase()); } else{ sb.append(ch); } } }//for } } }