public static void writeJSONString(Object value, Writer out) throws IOException {
		if(value == null){
			out.write("null");
			return;
		}
		
		if(value instanceof String){		
            out.write('\"');
			out.write(escape((String)value));
            out.write('\"');
			return;
		}
		
		if(value instanceof Double){
			if(((Double)value).isInfinite() || ((Double)value).isNaN())
				out.write("null");
			else
				out.write(value.toString());
			return;
		}
		
		if(value instanceof Float){
			if(((Float)value).isInfinite() || ((Float)value).isNaN())
				out.write("null");
			else
				out.write(value.toString());
			return;
		}		
		
		if(value instanceof Number){
			out.write(value.toString());
			return;
		}
		
		if(value instanceof Boolean){
			out.write(value.toString());
			return;
		}
		
		if((value instanceof JSONStreamAware)){
			((JSONStreamAware)value).writeJSONString(out);
			return;
		}
		
		if((value instanceof JSONAware)){
			out.write(((JSONAware)value).toJSONString());
			return;
		}
		
		if(value instanceof Map){
			JSONObject.writeJSONString((Map)value, out);
			return;
		}
		
		if(value instanceof Collection){
			JSONArray.writeJSONString((Collection)value, out);
            return;
		}
		
		if(value instanceof byte[]){
			JSONArray.writeJSONString((byte[])value, out);
			return;
		}
public static void writeJSONString ( Object value , Writer out ) throws IOException { if ( value == null ) { out . write ( "null" ) ; return ; } if ( value instanceof String ) { out . write ( '\"' ) ; out . write ( escape ( ( String ) value ) ) ; out . write ( '\"' ) ; return ; } if ( value instanceof Double ) { if ( ( ( Double ) value ) . isInfinite ( ) || ( ( Double ) value ) . isNaN ( ) ) out . write ( "null" ) ; else out . write ( value . toString ( ) ) ; return ; } if ( value instanceof Float ) { if ( ( ( Float ) value ) . isInfinite ( ) || ( ( Float ) value ) . isNaN ( ) ) out . write ( "null" ) ; else out . write ( value . toString ( ) ) ; return ; } if ( value instanceof Number ) { out . write ( value . toString ( ) ) ; return ; } if ( value instanceof Boolean ) { out . write ( value . toString ( ) ) ; return ; } if ( ( value instanceof JSONStreamAware ) ) { ( ( JSONStreamAware ) value ) . writeJSONString ( out ) ; return ; } if ( ( value instanceof JSONAware ) ) { out . write ( ( ( JSONAware ) value ) . toJSONString ( ) ) ; return ; } if ( value instanceof Map ) { JSONObject . writeJSONString ( ( Map ) value , out ) ; return ; } if ( value instanceof Collection ) { JSONArray . writeJSONString ( ( Collection ) value , out ) ; return ; } if ( value instanceof byte [ ] ) { JSONArray . writeJSONString ( ( byte [ ] ) value , out ) ; return ; }
Encode an object into JSON text and write it to out.
<p>
If this object is a Map or a List, and it's also a JSONStreamAware or a JSONAware, JSONStreamAware or JSONAware will be considered firstly.
<p>
DO NOT call this method from writeJSONString(Writer) of a class that implements both JSONStreamAware and (Map or List) with
"this" as the first parameter, use JSONObject.writeJSONString(Map, Writer) or JSONArray.writeJSONString(List, Writer) instead.

@see org.json.simple.JSONObject#writeJSONString(java.util.Map, java.io.Writer)
@see org.json.simple.JSONArray#writeJSONString(List, java.io.Writer)

@param value
@param writer