/** * Encode a list into JSON text and write it to out. If this list is also a JSONStreamAware or a * JSONAware, JSONStreamAware and JSONAware specific behaviours will be ignored at this top level. * * @see org.json.simpleForBukkit.JSONValue#writeJSONString(Object, Writer) * @param list * @param out */ public static void writeJSONString(List<Object> list, Writer out) throws IOException { if (list == null) { out.write("null"); return; } boolean first = true; Iterator<Object> iter = list.iterator(); out.write('['); while (iter.hasNext()) { if (first) first = false; else out.write(','); Object value = iter.next(); if (value == null) { out.write("null"); continue; } JSONValue.writeJSONString(value, out); } out.write(']'); }
/** * 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()); }