/** * 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(Map, Writer) * @see org.json.simple.JSONArray#writeJSONString(List, Writer) * @param value * @param writer */ 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 List) { JSONArray.writeJSONString((List) value, out); return; } out.write(value.toString()); }
/** * 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.simpleForBukkit.JSONObject#writeJSONString(Map, Writer) * @see org.json.simpleForBukkit.JSONArray#writeJSONString(List, Writer) * @param value * @param writer */ @SuppressWarnings("unchecked") 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<Object, Object>) value, out); return; } if (value instanceof List<?>) { JSONArray.writeJSONString((List<Object>) value, out); return; } if (BukkitStringifier.canHandle(value.getClass())) { writeJSONString(BukkitStringifier.handle(value), out); return; } out.write(value.toString()); }